m0_74035815 2023-12-04 16:21 采纳率: 85.7%
浏览 14
已结题

如何在此代码上增加一个统计学生生源的功能?(语言-c语言)


#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define MAXSIZE 1000
int renshu;
 
 
typedef struct Student{           //存放学生姓名的表
​char name[20];      //姓名int num;​//学号
​char sex[10];
​int dianhua;
​char place[20];      
}Student;
 
typedef struct{
​Student elem[MAXSIZE];         //线性表占用的数组空间int last;                     //最后一个元素的下标
}SeqList;
 
    //顺序表的输入    
void InList(SeqList *L,int i){       //逐个输入学生信息int x;
​printf("请输入学生数量:");
​scanf("%d",&x);
​renshu=x;
​for(i=1;i<=x;i++){
​​printf("第%d位学生信息\n",i);
​​printf("———————————————\n");
​​printf("姓名:");
​​scanf("%s",&L->elem[i].name);
​​printf("———————————————\n");
​​printf("学号:");
​​scanf("%d",&L->elem[i].num);
​​printf("———————————————\n");
​​printf("性别:");
​​scanf("%s",&L->elem[i].sex);
​​printf("———————————————\n");
​​printf("电话:");
​​scanf("%d",&L->elem[i].dianhua);
​​printf("———————————————\n");
​​printf("籍贯:");
​​scanf("%s",&L->elem[i].place);
​}
​L->last=x;
​printf("\n");
}
 
    //输出顺序表
void PrintList(SeqList *L,int i){                    //输出总成绩for(i=1;i<=L->last;i++){
​​printf("姓名:%s 学号:%d 性别:%s 电话:%d 籍贯:%s\n",L->elem[i].name,L->elem[i].num,L->elem[i].sex,L->elem[i].dianhua,L->elem[i].place);
​}
}
 
    //顺序表的查询
void Find(SeqList *L){                        //顺序表的查询,按照学号查询该学生成绩int i=1;
​int n;
​if(L->last<1){                            //判断是否为空表
​​printf("没有该同学\n");
​​return;
​}
​printf("输入要查找学生的学号\n");
​scanf("%d",&n);
​while(i<=L->last && L->elem[i].num!=n){         //循环查找对应学号的下标
​​i++;
​}
​if(i<=L->last){
​​printf("该学生姓名为:%s 学号为:%d 性别为:%s 电话为:%d 籍贯为:%s\n",L->elem[i].name,L->elem[i].num,L->elem[i].sex,L->elem[i].dianhua,L->elem[i].place);
​​return;
​}
​if(i>L->last){
​​printf("学号错误,未查询到该学生\n");
​​return;
​​}
}
 
           //顺序表的删除
int Delete(SeqList *L, int i){                  //从L中删除指定位序i的元素,该元素数组下标为iint j;
​int k;
​int error;
​printf("请输入要删除的学生学号:");
​scanf("%d",&i);
​if(L->last<1){                 //检查是否为空表
​​printf("空表!");
​​return error;
​}
​for(k=1;k<=L->last;k++){
​​if(L->elem[k].num==i)
​​break;
​}
​if(k>L->last){
​​printf("未找到该学生!\n");
​​return error;
​} else{
​​for(j=k;j<=L->last;j++)
​​​L->elem[j]=L->elem[j+1];            //将位序j+1及以后的元素前移
​​L->last--;                               //last仍指向最后元素
​​return true;
​}
}
 
                   //顺序表的插入
int Insert(SeqList *L,int i,Student e){      //在L的指定位序i中插入一个新元素e;位序i元素的数组位置下表是iint j;
​if(L->last==MAXSIZE){         //表空间已满,不能插入
​​printf("表满\n");
​​return 0;
​}
​if(i<1 || i>L->last+2){            //检查插入位序的合法性:是否在1~n。n为当前元素个数,即last
​​printf("位序不合法\n");
​​return 0;
​}
​for(j=L->last;j>=i-1;j--)         //last指向序列最后元素
​​L->elem[j+1]=L->elem[j];
​L->elem[i]=e;
​L->last++;
​return 1;
}
 
 
int main(){
​int N=1,i,j;
​SeqList L;
​Student e,g,q;
​int renshu,a;
​printf("**********************\n");
​printf("*------选择操作------*\n");
​printf("*------1 登记--------*\n");
​printf("*------2 输出--------*\n");
​printf("*------3 查询--------*\n");
​printf("*------4 删除--------*\n");
​printf("*------5 插入--------*\n");
​printf("*------0 退出--------*\n");
​printf("**********************\n");
​while(N){
​​printf("请选择操作\n");
​​scanf("%d",&N);
​​if(N==1){            //登记成绩
​​​InList(&L,i);
​​}
​​else if(N==2){                 //输出成绩
​​​PrintList(&L,i);
​​}
​​else if(N==3){                 //查询
​​​Find(&L);
​​}
​​else if(N==4){                   //删除
​​​if(Delete(&L,j)){
​​​​renshu--;
​​​​printf("删除成功\n");
​​​}else {
​​​​printf("删除失败\n");
​​​}
​​}
​​else if(N==5){             //插入
​​​printf("请输入要插入的位置:");
​​​scanf("%d",&a);
​​​printf("请输入学生姓名:");
​​​scanf("%s",&g.name);
​​​printf("请输入学生学号:");
​​​scanf("%d",&g.num);
​​​printf("请输入学生性别:");
​​​scanf("%s",&g.sex);
​​​printf("请输入学生电话:");
​​​scanf("%d",&g.dianhua);
​​​printf("请输入学生籍贯:");
​​​scanf("%s",&g.place);
​​​if(Insert(&L,a,g)){
​​​​renshu++;
​​​​printf("插入成功\n");
​​​}else {
​​​​printf("插入失败\n");
​​​}
​​}else if(N==0){
​​​printf("退出成功,按任意键结束\n");
​​​exit(0);
​​}
​}
​return 0;
}
  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-12-04 16:21
    关注
    #include <stdio.h>
    #include <stdlib.h>
    #include <wchar.h>
    #include <locale.h>
    
    #define MAXSIZE 1000
    
    typedef struct Student {
        wchar_t name[20];
        int num;
        wchar_t sex[10];
        wchar_t dianhua[20];
        wchar_t place[20];
    } Student;
    
    typedef struct {
        Student elem[MAXSIZE];
        int last;
    } SeqList;
    
    void InList(SeqList *L, int i) {
        int x;
        printf("请输入学生数量:");
        scanf("%d", &x);
        L->last = x;
        for (i = 1; i <= x; i++) {
            printf("第%d位学生信息\n", i);
            printf("———————————————\n");
            printf("姓名:");
            scanf("%ls", L->elem[i].name);
            printf("———————————————\n");
            printf("学号:");
            scanf("%d", &L->elem[i].num);
            printf("———————————————\n");
            printf("性别:");
            scanf("%ls", L->elem[i].sex);
            printf("———————————————\n");
            printf("电话:");
            scanf("%ls", L->elem[i].dianhua);
            printf("———————————————\n");
            printf("籍贯:");
            scanf("%ls", L->elem[i].place);
        }
        printf("\n");
    }
    
    void PrintList(SeqList *L, int i) {
        for (i = 1; i <= L->last; i++) {
            printf("姓名:%ls 学号:%d 性别:%ls 电话:%ls 籍贯:%ls\n", L->elem[i].name, L->elem[i].num, L->elem[i].sex, L->elem[i].dianhua, L->elem[i].place);
        }
    }
    
    void Find(SeqList *L) {
        int i = 1;
        int n;
        if (L->last < 1) {
            printf("没有该同学\n");
            return;
        }
        printf("输入要查找学生的学号\n");
        scanf("%d", &n);
        while (i <= L->last && L->elem[i].num != n) {
            i++;
        }
        if (i <= L->last) {
            printf("该学生姓名为:%ls 学号为:%d 性别为:%ls 电话为:%ls 籍贯为:%ls\n", L->elem[i].name, L->elem[i].num, L->elem[i].sex, L->elem[i].dianhua, L->elem[i].place);
            return;
        }
        if (i > L->last) {
            printf("学号错误,未查询到该学生\n");
            return;
        }
    }
    
    int Delete(SeqList *L, int i) {
        int j;
        int k;
        int error;
        printf("请输入要删除的学生学号:");
        scanf("%d", &i);
        if (L->last < 1) {
            printf("空表!");
            return error;
        }
        for (k = 1; k <= L->last; k++) {
            if (L->elem[k].num == i)
                break;
        }
        if (k > L->last) {
            printf("未找到该学生!\n");
            return error;
        } else {
            for (j = k; j <= L->last; j++)
                L->elem[j] = L->elem[j + 1];
            L->last--;
            return 1;
        }
    }
    
    int Insert(SeqList *L, int i, Student e) {
        int j;
        if (L->last == MAXSIZE) {
            printf("表满\n");
            return 0;
        }
        if (i < 1 || i > L->last + 2) {
            printf("位序不合法\n");
            return 0;
        }
        for (j = L->last; j >= i - 1; j--)
            L->elem[j + 1] = L->elem[j];
        L->elem[i] = e;
        L->last++;
        return 1;
    }
    
    void CountPlace(SeqList *L) {
        wchar_t place[20];
        printf("请输入要统计生源的籍贯:");
        scanf("%ls", place);
        int count = 0;
        for (int i = 1; i <= L->last; i++) {
            if (wcscmp(L->elem[i].place, place) == 0) {
                count++;
            }
        }
        printf("籍贯为%ls的学生数量为%d\n", place, count);
    }
    
    void CountAllPlaces(SeqList *L) {
        wchar_t places[MAXSIZE][20];
        int count[MAXSIZE] = {0};
        int uniqueCount = 0;
    
        for (int i = 1; i <= L->last; i++) {
            int found = 0;
            for (int j = 0; j < uniqueCount; j++) {
                if (wcscmp(L->elem[i].place, places[j]) == 0) {
                    count[j]++;
                    found = 1;
                    break;
                }
            }
            if (!found) {
                wcscpy(places[uniqueCount], L->elem[i].place);
                count[uniqueCount]++;
                uniqueCount++;
            }
        }
    
        for (int i = 0; i < uniqueCount; i++) {
            printf("%ls  %d\n", places[i], count[i]);
        }
    }
    
    int main() {
        setlocale(LC_ALL, "");
        int N = 1, i, j;
        SeqList L;
        Student e, g, q;
        int renshu, a;
        printf("**********************\n");
        printf("*------选择操作------*\n");
        printf("*------1 登记--------*\n");
        printf("*------2 输出--------*\n");
        printf("*------3 查询--------*\n");
        printf("*------4 删除--------*\n");
        printf("*------5 插入--------*\n");
        printf("*------6 统计生源----*\n");
        printf("*------7 统计所有生源----*\n");
        printf("*------0 退出--------*\n");
        printf("**********************\n");
        while (N) {
            printf("请选择操作\n");
            scanf("%d", &N);
            if (N == 1) {
                InList(&L, i);
            } else if (N == 2) {
                PrintList(&L, i);
            } else if (N == 3) {
                Find(&L);
            } else if (N == 4) {
                if (Delete(&L, j)) {
                    renshu--;
                    printf("删除成功\n");
                } else {
                    printf("删除失败\n");
                }
            } else if (N == 5) {
                printf("请输入要插入的位置:");
                scanf("%d", &a);
                printf("请输入学生姓名:");
                scanf("%ls", g.name);
                printf("请输入学生学号:");
                scanf("%d", &g.num);
                printf("请输入学生性别:");
                scanf("%ls", g.sex);
                printf("请输入学生电话:");
                scanf("%ls", g.dianhua);
                printf("请输入学生籍贯:");
                scanf("%ls", g.place);
                if (Insert(&L, a, g)) {
                    renshu++;
                    printf("插入成功\n");
                } else {
                    printf("插入失败\n");
                }
            } else if (N == 6) {
                CountPlace(&L);
            } else if (N == 7) {
                CountAllPlaces(&L);
            } else if (N == 0) {
                printf("退出成功,按任意键结束\n");
                exit(0);
            }
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    1人已打赏
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月4日
  • 已采纳回答 12月4日
  • 创建了问题 12月4日