voidincrease()//增加学生信息{int m, flag, i = n, j;printf("请输入待添加的学生人数:\n");scanf("%d",&m);if(m >0){do{
flag =1;while(flag !=0){
flag =0;printf("请输入第%d位学生的学号:\n", i +1);getchar();gets(stu[i].num);for(j =0; j < i; j++){if(strcmp(stu[i].num, stu[j].num)==0){printf("该学号已存在,请重新输入!\n");
flag =1;break;}}}printf("请输入第%d位学生姓名:\n", i +1);gets(stu[i].name);printf("请输入第%d位学生性别:\n", i +1);gets(stu[i].sex);printf("请输入第%d位学生年龄:\n", i +1);scanf("%d",&stu[i].age);printf("请输入第%d位学生C语言成绩:\n", i +1);scanf("%f",&stu[i].score[0]);printf("请输入第%d位学生高等数学成绩:\n", i +1);scanf("%f",&stu[i].score[1]);printf("请输入第%d位学生大学英语成绩:\n", i +1);scanf("%f",&stu[i].score[2]);
i++;}while(i < m + n);
n += m;printf("添加完成!");system("pause");}}
search函数
打印时使用\t,让打印出来的格式整齐
定义flag,判断学生信息是否存在
由于用户操作次数不同,所以在外层套一个循环
case 3:return;表示在用户输入3时,退出该循环,返回主函数
voidsearch()//查询学生信息{int number, flag, i;char s1[100];printf("*****************************\n");printf("**-------1.按学号查询------**\n");printf("**-------2.按姓名查询------**\n");printf("**-------3.退出本菜单------**\n");printf("*****************************\n");while(1){
flag =0;printf("请输入要执行的操作序号:\n");scanf("%d",&number);switch(number){case1:printf("请输入需要查找学生的学号:\n");scanf("%s",s1);for(i =0; i < n; i++){if(strcmp(stu[i].num, s1)==0){
flag =1;printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");printf("%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]);}}break;case2:printf("请输入需要查找学生的姓名:\n");scanf("%s",s1);for(i =0; i < n; i++){if(strcmp(stu[i].name, s1)==0){
flag =1;printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");printf("%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]);}}break;case3:return;default:printf("请在1--3之间输入!\n");}if(flag ==0)printf("找不到该学生,请重新输入!\n");}}
dlt函数(删除学生信息)
删除后,将n–,表示,学生总数减一
定义flag,判断是否找到对应的学生信息
voiddlt()//删除信息{int flag, i, j;char s1[100];printf("请输入要删除学生的学号:\n");getchar();gets(s1);
flag =0;for(i =0; i < n; i++){if(strcmp(stu[i].num, s1)==0){
flag =1;for(j = i; j < n -1; j++){
stu[j]= stu[j +1];}}if(flag ==1)break;}if(flag ==0)printf("未找到该学生!\n");if(flag ==1){printf("删除成功!\n");
n--;}system("pause");}
voidflush()//刷新学生信息{
FILE* fp;char filename[100];int i, k =0;printf("请输入需要刷新的文件名:\n");getchar();gets(filename);if((fp =fopen(filename,"r"))==NULL){printf("打开文件失败!\n");exit(0);}for(i =0; i < N; i++){if(fread(&stu[i],sizeof(struct STU),1, fp)==1){
k++;}}
n = k;if(k ==0)printf("刷新失败!\n");elseprintf("刷新成功!\n");fclose(fp);system("pause");}
完整代码如下
#include<stdio.h>#include<string.h>#include<stdlib.h>#define N 50voidmenu();voidhelp();voidincrease();voidsearch();voiddlt();voidsave();voiddisplay();voidmodify();voidflush();voidexit();int n =0, t =1;//n为总人数,t控制循环struct STU {char num[100];//学号char name[100];//姓名char sex[10];//性别int age;//年龄float score[3];//成绩*3}stu[N];intmain(){int number;while(t){menu();printf("请输入菜单编号:");scanf("%d",&number);switch(number){case1:help();break;//使用帮助case2:increase();break;//增加学生信息case3:search();break;//查询学生信息case4:dlt();break;//删除学生信息case5:save();break;//保存当前信息case6:display();break;//显示当前信息case7:modify();break;//修改学生信息case8:flush();break;//刷新学生信息case9:exit(0);break;//退出default:printf("输入有误!");}}}voidmenu()//显示菜单{printf("\n");printf("*****************************************************\n");printf("* 学生信息管理系统 *\n");printf("*****************************************************\n");printf("********************系统功能菜单*********************\n");printf("----------------------- -------------------------\n");printf("*****************************************************\n");printf("** 1、使用帮助 * 2、增加学生信息 **\n");printf("*****************************************************\n");printf("** 3、查询学生信息 * 4、删除学生信息 **\n");printf("*****************************************************\n");printf("** 5、保存当前信息 * 6、显示当前信息 **\n");printf("*****************************************************\n");printf("** 7、修改学生信息 * 8、刷新学生信息 **\n");printf("*****************************************************\n");printf("** 9、退出系统 * **\n");printf("************************* \n");printf("----------------------- -------------------------\n");}voidhelp()//使用帮助{printf("\n这是一个学生管理系统,为方便您更快了解它,请先阅读以下注意事项:\n");printf("\n 注意事项: \n ");printf("\n 1、请根据提示进行操作!\n");printf("\n 2、初次使用请先选择增加学生信息!\n");printf("\n 3、修改或者增加学生信息后切记保存!\n");printf("\n 4、如果数据有错误,请先修改再保存!\n");printf("\n 5、若您之前使用过,下次进入系统请先刷新学生信息!\n");printf("\n 6、在添加学生时,用两个字符代表不同的性别,比如男用‘M’代替,女用‘W’代替!\n");printf("\n 7、保存或者刷新时,输入的文件名后缀请使用.txt,比如: stu.txt,系统会在源程序\n");printf("\n “学生管理系统.exe”的相同目录建立一个.txt文件来保存学生信息,您可以查看\n");printf("\n 该文件,但非专业人员不要轻易改动,否则会造成刷新数据异常或刷新失败!\n");printf("\n 8、学生信息包括:姓名、学号、性别、年龄、C语言成绩、高数成绩、英语成绩等!\n");printf("\n 9、使用遇到任何问题请与我们联系,电话:12345678\n");printf("\n 10、最后感谢您的使用!\n");system("pause");//让系统暂停}voidincrease()//增加学生信息{int m, flag, i = n, j;printf("请输入待添加的学生人数:\n");scanf("%d",&m);if(m >0){do{
flag =1;while(flag !=0){
flag =0;printf("请输入第%d位学生的学号:\n", i +1);getchar();gets(stu[i].num);for(j =0; j < i; j++){if(strcmp(stu[i].num, stu[j].num)==0){printf("该学号已存在,请重新输入!\n");
flag =1;break;}}}printf("请输入第%d位学生姓名:\n", i +1);gets(stu[i].name);printf("请输入第%d位学生性别:\n", i +1);gets(stu[i].sex);printf("请输入第%d位学生年龄:\n", i +1);scanf("%d",&stu[i].age);printf("请输入第%d位学生C语言成绩:\n", i +1);scanf("%f",&stu[i].score[0]);printf("请输入第%d位学生高等数学成绩:\n", i +1);scanf("%f",&stu[i].score[1]);printf("请输入第%d位学生大学英语成绩:\n", i +1);scanf("%f",&stu[i].score[2]);
i++;}while(i < m + n);
n += m;printf("添加完成!");system("pause");}}voidsearch()//查询学生信息{int number, flag, i;char s1[100];printf("*****************************\n");printf("**-------1.按学号查询------**\n");printf("**-------2.按姓名查询------**\n");printf("**-------3.退出本菜单------**\n");printf("*****************************\n");while(1){
flag =0;printf("请输入要执行的操作序号:\n");scanf("%d",&number);switch(number){case1:printf("请输入需要查找学生的学号:\n");scanf("%s",s1);for(i =0; i < n; i++){if(strcmp(stu[i].num, s1)==0){
flag =1;printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");printf("%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]);}}break;case2:printf("请输入需要查找学生的姓名:\n");scanf("%s", s1);for(i =0; i < n; i++){if(strcmp(stu[i].name, s1)==0){
flag =1;printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");printf("%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]);}}break;case3:return;default:printf("请在1--3之间输入!\n");}if(flag ==0)printf("找不到该学生,请重新输入!\n");}}voiddlt()//删除信息{int flag, i, j;char s1[100];printf("请输入要删除学生的学号:\n");getchar();gets(s1);
flag =0;for(i =0; i < n; i++){if(strcmp(stu[i].num, s1)==0){
flag =1;for(j = i; j < n -1; j++){
stu[j]= stu[j +1];}}if(flag ==1)break;}if(flag ==0)printf("未找到该学生!\n");if(flag ==1){printf("删除成功!\n");
n--;}system("pause");}voidsave()//保存学生信息{
FILE* fp;char filename[100];int i;printf("请输入要保存的文件名:\n");scanf("%s", filename);if((fp =fopen(filename,"w"))==NULL){printf("打开文件失败!\n");exit(0);}for(i =0; i < n; i++){if(fwrite(&stu[i],sizeof(struct STU),1, fp)!=1)printf("保存失败!\n");}printf("保存成功!\n");fclose(fp);system("pause");}voiddisplay()//显示当前信息{int i;if(n ==0)printf("您好,现在暂无学生信息,请先添加学生信息!\n");else{printf("现在共有%d名学生\n", n);printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");for(i =0; i < n; i++){printf("%s\t\t%s\t\t%s\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]);}}system("pause");}voidmodify()//修改学生信息{int flag, age, num, i;char number[100], sex[10];float score1, score2, score3;char s1[100];printf("请输入需要修改的学生姓名:\n");getchar();gets(s1);while(1){
flag =0;for(i =0; i < n; i++){if(strcmp(s1, stu[i].name)==0){
flag =1;printf("***************************************************\n");printf("*----1.修改学号-------- - -----2.修改性别-------*\n");printf("*----3.修改年龄-------- - -----4.修改C语言成绩--*\n");printf("*----5.修改高数成绩---- - -----6.修改英语成绩---*\n");printf("*-------------------7.退出本菜单------------------*\n");printf("***************************************************\n\n");printf("请输入菜单编号:\n");scanf("%d",&num);switch(num){case1:printf("请输入新学号:\n");getchar();gets(number);strcpy(stu[i].num, number);break;case2:printf("请输入性别:\n");getchar();gets(sex);strcpy(stu[i].sex, sex);break;case3:printf("请输入年龄:\n");scanf("%d",&age);
stu[i].age = age;break;case4:printf("请输入C语言成绩:\n");scanf("%f",&score1);
stu[i].score[0]= score1;break;case5:printf("请输入高数成绩:\n");scanf("%f",&score2);
stu[i].score[1]= score2;break;case6:printf("请输入英语成绩:\n");scanf("%f",&score3);
stu[i].score[2]= score3;break;case7:return;default:printf("请输入1--7之间的数字!\n");}if(num >0&& num <8)printf("修改成功!\n");break;}}if(flag ==0){printf("未找到该学生,请重新输入学生姓名:\n");gets(s1);}}system("pause");}voidflush()//刷新学生信息{
FILE* fp;char filename[100];int i, k =0;printf("请输入需要刷新的文件名:\n");getchar();gets(filename);if((fp =fopen(filename,"r"))==NULL){printf("打开文件失败!\n");exit(0);}for(i =0; i < N; i++){if(fread(&stu[i],sizeof(struct STU),1, fp)==1){
k++;}}
n = k;if(k ==0)printf("刷新失败!\n");elseprintf("刷新成功!\n");fclose(fp);system("pause");}