

学生信息管理系统NO.1学生基本信息和成绩系统只要使用的C语言来编写:
#include #include #include #include #include #include #include #define M 50typedef struct{ //定义学生信息结构体 char no[20]; //学号 char name[20]; //姓名 char major[20]; //专业 char sex[5]; //性别 int age; //年龄} students;void return_ment(); //返回主菜单void print_ment(); //打印主菜单int ment_select(); //主菜单选择int enter(students t[]); //输入学生信息void list(students t[], int n); //显示学生信息void search_name(students t[], int n); //按姓名查找显示学生信息void search_no(students t[], int n); //按学号查找显示学生信息void change_no(students t[], int n); //按学号修改学生信息int del(students t[], int n); //删除学生信息int add(students t[], int n); //插入学生信息int load(students t[]); //从文件中读取学生信息void print(students temp); //显示单条学生信息void save(students t[], int n); //保存学生信息为文件int find_name(students t[], int n, char *s); //按姓名查找int find_no(students t[], int n, char *s); //按学号查找void return_ment(){ char mistake[50]; printf("按回车键返回主菜单...\n"); gets(mistake); return;}void print_ment(){ printf("***********欢迎使用学生信息管理系统**********\n"); printf(" 0. 录入学生信息\n"); printf(" 1. 浏览学生信息\n"); printf(" 2. 按姓名查找\n"); printf(" 3. 按学号查找\n"); printf(" 4. 按学号删除\n"); printf(" 5. 按学号修改\n"); printf(" 6. 插入一组学生信息\n"); printf(" 7. 保存学生信息到文件\n"); printf(" 8. 加载文件到内存\n"); printf(" 9. 进入学生成绩系统\n"); printf(" 10.退出学生信息管理系统\n"); printf("********************************************\n"); return;}int ment_select(){ print_ment(); printf("\n输入您的菜单选项编号(0-9):"); int c; while (1) { scanf("%d", &c); getchar(); if (c > 11 || c < 0) { system("cls"); print_ment(); printf("\n输入的选项编号无效,请重新输入:"); continue; } else break; } return c;}//输入学生信息,形参为结构体数组,函数值返回类型为整型表示信息长度int enter(students t[]){ int i, n; system("cls"); printf("\n请输入需要记录学生的条数\n"); scanf("%d", &n); system("clear"); printf("请输入%d位学生的信息:\n", n); printf("学号 姓名 专业 性别 年龄\n"); printf("----------------------------------------------------------------\n"); for (i = 0; i < n; i++) { scanf("%s", &t[i].no); scanf("%s", &t[i].name); scanf("%s", &t[i].major);//专业 scanf("%s", &t[i].sex); scanf("%d", &t[i].age); /*scanf("%s,%s,%s,%s,%d",&t[i].no,&t[i].name,&t[i].major,&t[i].sex,&t[i].age);*/ getchar(); } printf("信息录入中...\n"); Sleep(1); if (i == n) printf("信息录入成功!\n"); else printf("信息录入失败!\n"); return n;}//显示信息,形参为结构体数组和信息条数void list(students t[], int n){ int i; system("cls"); if (n == 0) { printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n"); return; } printf("\n*******************学生清单******************\n"); printf("学号 姓名 专业 性别 年龄\n"); printf("-----------------------------------------------------------------\n"); for (i = 0; i < n; i++) { printf("%-14s%-14s%-14s%-14s%-14d\n", t[i].no, t[i].name, t[i].major, t[i].sex, t[i].age); if (((i + 1) % 10 == 0) && n % 10>0) { printf("---------------------------------------------\n"); printf("每页显示10位学生的信息,按回车向后翻页...\n"); getchar(); system("cls"); printf("\n*******************学生清单*******************\n"); printf("学号 姓名 专业 性别 年龄\n"); printf("------------------------------------------------------------\n"); } } printf("--------------------------------------------------------------\n");}// 02按姓名查找显示学生信息void search_name(students t[], int n){ char s[20]; int i; system("cls"); if (n == 0) { printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n"); return; } printf("请输入查找的学生的名字:\n"); scanf("%s", s); getchar(); i = find_name(t, n, s); if (i > n - 1) printf("没有姓名为%s的学生!\n", s); else // print(*t); printf("\n*******************学生清单*******************\n"); printf("学号 姓名 专业 性别 年龄\n"); printf("------------------------------------------------------------\n"); printf("%-14s%-14s%-14s%-14s%-14d\n", t[i].no, t[i].name, t[i].major, t[i].sex, t[i].age); printf("------------------------------------------------------------\n");}void search_no(students t[], int n){ system("cls"); int no; char s[20]; if (n == 0) { printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n"); return; } printf("请输入查找信息学生的学号:\n"); scanf("%s", s); getchar(); no = find_no(t, n, s); if (no >= 0 && no < n) { // print(t[no]); printf("\n*******************学生清单*******************\n"); printf("学号 姓名 专业 性别 年龄\n"); printf("------------------------------------------------------------\n"); printf("%-14s%-14s%-14s%-14s%-14d\n", t[no].no, t[no].name, t[no].major, t[no].sex, t[no].age); printf("------------------------------------------------------------\n"); printf("\r\n"); } else printf("学号为%s的学生不存在!\n", s);}void change_no(students t[], int n){ if (n == 0) { printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n"); return; } system("cls"); char no[20]; int i; printf("请输入要修改的学生信息的学号:\n"); scanf("%s", no); i = find_no(t, n, no); if (i == n) printf("没有找到学号为%s的学生!\n", no); else { printf("学号为%s的学生信息修改前为:\n", no); // print(t[i]); printf("学号 姓名 专业 性别 年龄\n"); printf("--------------------------------------------------------\n"); printf("%-14s%-14s%-14s%-14s%-14d\n", t[i].no, t[i].name, t[i].major, t[i].sex, t[i].age); printf("\n\n"); printf("请输入修改后的信息:\n"); printf("学号 姓名 专业 性别 年龄\n"); printf("--------------------------------------------------------\n"); scanf("%s", &t[i].no); scanf("%s", &t[i].name); scanf("%s", &t[i].major); scanf("%s", &t[i].sex); scanf("%d", &t[i].age); getchar(); } system("cls"); printf("正在修改学号为%s的学生信息...\n", no); Sleep(1); system("clear"); printf("*****修改成功*****\n"); printf("修改后的信息为:\n"); // print(t[i]); printf("学号 姓名 专业 性别 年龄\n"); printf("--------------------------------------------------------\n"); printf("%-14s%-14s%-14s%-14s%-14d\n", t[i].no, t[i].name, t[i].major, t[i].sex, t[i].age);}int del(students t[], int n){ char s[20]; int ch = 0; int i; system("cls"); if (n == 0) { printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存\n"); return n; } printf("请输入要删除的学生姓名:\n"); scanf("%s", s); getchar(); i = find_name(t, n, s); if (i == n) printf("没有找到名字为%s的学生!\n", s); else { printf("正在删除...\n"); for (; i < n; i++) { strcpy(t[i].name, t[i + 1].name); strcpy(t[i].no, t[i + 1].no); strcpy(t[i].sex, t[i + 1].sex); t[i].age = t[i + 1].age; } n--; printf("删除成功!\n"); } return n;}int add(students t[], int n){ system("cls"); if (n == 0) { printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n"); return n; } students temp; int i, j; char s[20]; printf("请输入要插入的学生信息:\n"); printf("学号 姓名 专业 性别 年龄\n"); printf("-----------------------------------------------------------\n"); scanf("%s%s%s%s%d", &temp.no, &temp.name, &temp.major, &temp.sex, &temp.age); getchar(); printf("--------------------------------------------\n"); if (n > 0) { printf("请输入插入位置的姓名,将新信息插入在该学生前面:\n"); scanf("%s", s); getchar(); i = find_name(t, n, s); } else i = 0; for (j = n - 1; j >= i; j--) { strcpy(t[i + 1].no, t[i].no); strcpy(t[i + 1].name, t[i].name); strcpy(t[i + 1].major, t[i].major); strcpy(t[i + 1].sex, t[i].sex); t[i + 1].age = t[i].age; } strcpy(t[i].no, temp.no); strcpy(t[i].name, temp.name); strcpy(t[i].major, temp.major); strcpy(t[i].sex, temp.sex); t[i].age = temp.age; n++; printf("信息插入成功!\n"); return n;}// 保存void save(students t[], int n){ system("cls"); int i; FILE *fp; if ((fp = fopen("record.txt", "wb")) == NULL) { printf("无法打开学生信息文件!\n"); exit(1); } printf("\n正在保存...\n"); fprintf(fp, "数据的行数:%d", n); fprintf(fp, "\r\n"); fprintf(fp, "学号 姓名 专业 性别 年龄\n"); fprintf(fp, "-----------------------------------------------------------\n"); for (i = 0; i < n; i++) { fprintf(fp, "%-14s%-14s%-14s%-14s%-14d", t[i].no, t[i].name, t[i].major, t[i].sex, t[i].age); fprintf(fp, "\r\n"); } fclose(fp); Sleep(1); system("cls"); printf("*****保存成功*****\n");}// 8.加载信息int load(students t[]){ int i, n; FILE *fp; if ((fp = fopen("record.txt", "rb")) = NULL) { printf("无法打开学生信息文件!\n"); exit(1); } fscanf(fp, "%d", &n); for (i = 0; i < n; i++) fscanf(fp, "%14s%14s%14s%14s%14d", &t[i].no, &t[i].name, &t[i].major, &t[i].sex, &t[i].age); fclose(fp); printf("成功加载学生信息到内存中!\n"); return n;}//显示指定的一组数据void print(students temp){ printf("\n*******************学生清单*******************\n"); printf("学号 姓名 专业 性别 年龄\n"); printf("--------------------------------------------------------------\n"); printf("%-14s%-14s%-14s%-14s%-14d", temp.no, temp.name, temp.major, temp.sex, temp.age); printf("---------------------------------------------\n");}int find_name(students t[], int n, char *s){ int i; for (i = 0; i < n; i++) if (strcmp(s, t[i].name) == 0) return i; return i;}int find_no(students t[], int n, char *s){ int i; for (i = 0; i < n; i++) if (strcmp(s, t[i].no) == 0) return i; return i;}//**************************开始 学生成绩系统********************************************////成绩结构体struct score{ char snum[9]; char sname[11]; int chinese; int math; int english; int sumcj;//成绩总数 int rank;//排名 };//函数声明 void showmenu(void);//菜单 int xg(int);//修改成绩 void lr(int);//录入成绩 void cx(int);//查询成绩 void xhcx(int);//学号查询 void xmcx(int n);//姓名查询void allrankcx(int);//排名查询 void showcxmenu(void);//二级菜单,查询菜单 void xs(int);//成绩显示 void jspm(int);//计算排名 int sc(int);//删除成绩 void bccj(void);//保存成绩并退出 //main函数 int main1(){ int flag,n=0,count=0;//flag标志位,count计数,当前总人数 //-------------判断文件里面有多少条记录--------------------// FILE *fp; fp=fopen("cj.txt","a+"); if(fp==NULL) { printf("打开文件失败,请重试!\n"); getch(); fclose(fp); exit(0); } int c = 0; while(!feof(fp)) { char cc = fgetc(fp); if(cc==EOF) { break; } //输出字符// putchar(cc); c++; } count = c/14;// printf("%d", count); // getch(); fclose(fp); //---------------------------------// do { showmenu(); scanf("%d",&flag);//选择操作 switch(flag) { case 1: printf("请输入您要录入的人数:"); scanf("%d",&n); lr(n); count += n;break; case 2: count=sc(count);break; case 3: xg(count);break; case 4: cx(count);break; case 5: jspm(count);break; case 6: xs(count);break; case 0: bccj();break; default:printf("输入错误,请重试!\n");getch(); } }while(flag!=0); getch(); return 0;}//0显示菜单void showmenu(){ system("cls"); printf("*----------------------------------------------------*\n"); printf("* 欢迎进入学生成绩管理系统 *\n"); printf("*----------------------------------------------------*\n"); printf("* 1: 录入成绩 *\n"); printf("* 2: 删除成绩 *\n"); printf("* 3: 修改成绩 *\n"); printf("* 4: 成绩查询 *\n"); printf("* 5: 成绩计算并排名 *\n"); printf("* 6: 显示成绩信息 *\n"); printf("* 0: 保存学生成绩信息并退出系统 *\n"); printf("*----------------------------------------------------*\n"); printf("选择操作<0-6> \n"); return;} //1录入成绩 void lr(int n){ struct score stu[100]; FILE *fp; fp=fopen("cj.txt","a+"); if(fp==NULL) { printf("打开文件失败,请重试!\n"); getch(); fclose(fp); exit(0); } printf("请输入全部学生的学号,姓名,语文成绩,数学成绩,英语成绩;\n"); int i; for(i=0;i { printf("----第%d个学生----\n", i+1); printf("学号:"); scanf("%s",&stu[i].snum); printf("姓名:"); scanf("%s,",&stu[i].sname); printf("语文成绩:"); scanf("%d",&stu[i].chinese); printf("数学成绩:"); scanf("%d",&stu[i].math); printf("英语成绩:"); scanf("%d",&stu[i].english); stu[i].sumcj=0; stu[i].rank=0; //写入数据 fprintf(fp,"%s %s %d %d %d %d %d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);} fclose(fp); printf("添加学生成功,请按任意键返回\n"); getch(); } //2删除成绩 int sc(int n){ struct score stu[100]; struct score sub[99];//删除后的结构体数组 char stnum[9];//学号 int find=0; printf("请输入你要删除的学生学号:"); scanf("%s", &stnum); FILE *fp; fp=fopen("cj.txt","r"); if(fp==NULL) { printf("打开文件失败,请联系管理员\n"); getch(); return -1; } int c=0; int index=0;//用于记录目标序号 while(!feof(fp))//不为空 { fscanf(fp,"%s %s %d %d %d %d %d\n", &stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank); if(strcmp(stnum,stu[c].snum)==0) { find = 1;//根据学号查找,找到赋值为1 index = c;//记录编号 } c++; } fclose(fp); if(n==0) { printf("已经没有学生成绩信息了,请按任意键返回\n"); getch(); showmenu(); return n; } if(find==0) { printf("没有该学生成绩信息,请按任意键返回\n"); getch(); showmenu(); return n; } else { int i; //删除 for(i=0;i { if(i < index) { sub[i] = stu[i]; } else { sub[i] = stu[i+1]; } } fp=fopen("cj.txt","w"); //写入数据 for(i=0;i-1;i++) { fprintf(fp,"%s %s %d %d %d %d %d\n",sub[i].snum,sub[i].sname,sub[i].chinese,sub[i].math,sub[i].english,sub[i].sumcj,sub[i].rank); } fclose(fp); printf("学号为%s的学生成绩删除成功,请按任意键返回\n",stnum); getch(); showmenu(); return n-1; } } //3修改成绩int xg(int n) { struct score stu[100]; FILE *fp; char stnum[9]; int find=0; printf("请输入要修改的学生学号:"); scanf("%s",stnum); fp=fopen("cj.txt","r"); if(fp==NULL) { printf("文件打开失败,请联系管理员\n"); getch(); return -1; } int c=0; while(!feof(fp)) { fscanf(fp,"%s %s %d %d %d %d %d\n",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank); if(strcmp(stnum,stu[c].snum)==0) { find=1; //修改操作 printf("找到你要修改成绩的同学,请输入他的成绩:\n"); printf("语文成绩: %d,新成绩为:",stu[c].chinese); scanf("%d",&stu[c].chinese); printf("数学成绩: %d,新成绩为:",stu[c].math); scanf("%d",&stu[c].math); printf("英语成绩: %d,新成绩为:",stu[c].english); scanf("%d",&stu[c].english); } c++; } fclose(fp); if(find==0) { printf("没有找到要删除的学生记录,请按任意键退出\n"); getch(); } else { fp=fopen("cj.txt","w"); int i; for(i=0;i { //更新数据 fprintf(fp,"%s %s %d %d %d %d %d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank); } fclose(fp); printf("学号为%s同学的成绩已经修改成功,请按任意键返回",stnum); getch(); } showmenu(); return 1; } //4成绩查询void cx(int n) //n全班人数 { int k; do { showcxmenu(); scanf("%d",&k); switch(k) { case 1:xhcx(n);break;//学号查询 case 2:xmcx(n);break;//姓名查询 case 3:allrankcx(n);break;//全班排名查询 case 0:break; default:printf("输入错误,请重新选择\n");getch(); } }while(k!=0); return; }//4.0查询菜单void showcxmenu() { system("cls"); printf("*----------------------------------------------------*\n"); printf("* 成绩查询菜单 *\n"); printf("*----------------------------------------------------*\n"); printf("* 1: 按学号查询 *\n"); printf("* 2: 按姓名查询 *\n"); printf("* 3: 全班排名查询 *\n"); printf("* 0: 退出查询系统,返回主系统 *\n"); printf("*----------------------------------------------------*\n"); printf("选择操作<0-3> \n");}//4.1学号查询void xhcx(int n){ struct score stu[100]; char snum[9]; printf("请输入你要查询学生的学号:"); scanf("%s",&snum); FILE *fp; fp=fopen("cj.txt ","r"); if(fp==NULL) { printf("打开文件失败!\n"); getch(); exit(0); } int c = 0; while(!feof(fp)){ fscanf(fp,"%s %s %d %d %d %d %d\n",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank); c++; } int i; for(i=0;i { if(strcmp(snum,stu[i].snum)==0) { printf("学号\t姓名\t语文\t数学\t英语\t总分\t名次\n"); printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank); printf("按任意键返回\n"); getch(); fclose(fp); return; } } printf("未找到要查询学生的成绩,请重试!\n"); getch(); fclose(fp); return;} //4.2姓名查询void xmcx(int n){ struct score stu[100]; char sname[11]; printf("请输入你要查询学生的姓名:"); scanf("%s",&sname); FILE *fp; fp=fopen("cj.txt ","r"); if(fp==NULL) { printf("打开文件失败!\n"); getch(); exit(0); } int c = 0; while(!feof(fp)){ fscanf(fp,"%s %s %d %d %d %d %d\n\n",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank); c++; } int i; for(i=0;i { if(strcmp(sname,stu[i].sname)==0) { printf("学号\t姓名\t语文\t数学\t英语\t总分\t名次\n"); printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank); printf("按任意键返回\n"); getch(); fclose(fp); return; } } printf("未找到要查询学生的成绩,请重试!\n"); getch(); fclose(fp); return; }//4.3全班排名查询void allrankcx(int n){ struct score stu[100]; struct score temp; FILE *fp; fp=fopen("cj.txt ","r"); if(fp==NULL) { printf("打开文件失败!\n"); getch(); exit(0); } int c = 0; while(!feof(fp)){ fscanf(fp,"%s %s %d %d %d %d %d\n",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank); c++; } int i,j; for(i=0;i { if(stu[i].rank == 0){ printf("请先进行成绩计算进行排名!!\n"); getch(); fclose(fp); return; } stu[i].sumcj = stu[i].chinese + stu[i].math + stu[i].english; //冒泡排序算法:进行 n-1 轮比较 for(i=0; i-1; i++){ //每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较 for(j=0; j-1-i; j++){ if(stu[j].sumcj > stu[j+1].sumcj){ temp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = temp; } } } printf("学号\t姓名\t语文\t数学\t英语\t总分\t名次\n"); for(i=0;i { printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank); } printf("按任意键返回\n"); getch(); fclose(fp); return; } printf("查询失败,请重试!\n"); getch(); fclose(fp); return; }//5计算排名函数 void jspm(int n){ struct score stu[100]; int i,j,temp; int count; FILE *fp; fp=fopen("cj.txt","r"); if(fp==NULL) { printf("打开文件失败!\n"); getch(); exit(0); } int c = 0; while(!feof(fp)){ fscanf(fp,"%s %s %d %d %d %d %d\n",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank); stu[c].sumcj = stu[c].chinese + stu[c].math + stu[c].english; c++; } fclose(fp); //计算排名并存储 for(i=0;i { temp=1;//第1名 for(j=0;j if(stu[i].sumcj//如果较小,排名下降1名 } stu[i].rank=temp; } //更新记录 fp=fopen("cj.txt","w"); for(i=0;i { fprintf(fp,"%s %s %d %d %d %d %d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank); } fclose(fp); printf("数据重新计算和排名成功,请按任意键返回主菜单。\n"); getch(); return; }//6显示成绩信息void xs(int n) { struct score stu[100]; int i; printf("成绩信息如下:\n"); FILE *fp; fp=fopen("cj.txt","r"); if(fp==NULL) { printf("打开文件失败,请重试!\n"); getch(); fclose(fp); exit(0); } printf("学号\t姓名\t语文\t数学\t英语\t总分\t名次\n"); int c = 0; while(!feof(fp)) { fscanf(fp,"%s %s %d %d %d %d %d\n",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank); c++; } if(n!=0){//人数不为0 for(i=0;i { printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank); } } fclose(fp); printf("显示完毕 ,请按任意键返回\n"); getch(); return;}//0保存信息并退出系统void bccj(){ printf("感谢您的使用,欢迎下次使用!\n"); printf("感谢您的使用学生成绩系统,输入回车键回到主系统!\n"); getch(); return;}//**************************开始 学生成绩系统********************************************//void print_sort();void print_sort(){ printf("欢迎您进入学生成级系统"); return;}//主函数int main(){ students stu[M]; //定义结构体数组 int length = 0; //保存信息条数 for (;;) { system("cls"); switch (ment_select()) { case 0: length = enter(stu); break; case 1: list(stu, length); break; case 2: search_name(stu, length); break; case 3: search_no(stu, length); break; case 4: length = del(stu, length); break; case 5: change_no(stu, length); break; case 6: length = add(stu, length); break; case 7: save(stu, length); break; case 8: length = load(stu); break; case 9: print_sort(); main1(); break; case 10: exit(0); break; } return_ment(); } return 0;}


版权声明:本文为weixin_32666923原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。