学生证管理系统(C语言课程设计)
更新时间:2024-01-12 03:16:01 阅读量: 教育文库 文档下载
C语言课程设计报告
学 院: 地 球 科 学 学 院 专 业: 资源环境与城乡规划管理 题 目: 学 生 证 管 理 系 统 班 号: 014072-XX
姓 名: 李 仙 伟 学 号: XXXXXXXX 指导教师: XXXXXXXX
2010年11月26日
报告目录
一、课程设计目的 ………………………………………………………………3 二、实习内容及要求 ……………………………………………………………3 三、需求分析 ……………………………………………………………………3 四、总体分析 ……………………………………………………………………3 五、详细设计 ……………………………………………………………………4
5.0 头文件及结构体 ……………………………………………………………4 5.1 主函数………………………………………………………………………5 5.2 菜单模块……………………………………………………………………5 5.3 添加模块……………………………………………………………………6 5.4 修改模块……………………………………………………………………10 5.5 浏览模块 …………………………………………………………………14 5.6 查询模块 ………………………………………………………………… 15
5.6.1 按学号查询 ……………………………………………………………15
5.6.2 按名字查询 ……………………………………………………………16 5.6.3 按班级查询 ……………………………………………………………17
5.7 统计模块 …………………………………………………………………18
5.7.1 男生信息………………………………………………………………19 5.7.2 女生信息………………………………………………………………21 5.7.3 全体学生信息 …………………………………………………………23
5.8 删除模块 …………………………………………………………………23
六、上机操作 ……………………………………………………………………26
6.1 系统说明 …………………………………………………………………26 6.2 系统测试 …………………………………………………………………26
七、总结 ……………………………………………………………………32 八、源代码 …………………………………………………………………32
- 2 -
一、课程设计目的
通过实践,学会编制结构清晰、风格良好、数据结构适当的C语言程序,加深对C语言基础知识的理解和掌握,进一步巩固C语言编程实践能力,锻炼思维逻辑和解决综合性实际问题的能力。
二、实习内容及要求
1、用C语言编写一个学生证管理系统,该系统具有以下功能: (1)录入某位学生的学生证信息;
(2)给定学号,显示某位学生的学生证信息;
(3)给定某个班级的班号,显示该班所有学生的学生证信息; (4)给定某位学生的学号,修改该学生的学生证信息; (5)给定某位学生的学号,删除该学生的学生证信息; (6)提供一些统计各类信息的功能;
(7)提供浏览所有学生的学生证信息的功能。 2、输入要求
应用程序运行后,在屏幕上显示一个菜单;用户可以根据要求,选定相应的操作项目;进入某个操作后,根据应用程序的提示,从键盘输入相应的信息。 3、输出要求
(1)应用程序运行后,要在屏幕上显示一个菜单;
(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式 及结束方式等。
三、需求分析
根据题目要求,学生信息要从文本文件中存取,所以本程序应该提供读写文件,显示、 统计、查询、修改记录,保存文件等操作,此外,还应该提供键盘式选择菜单实现功能。
四、总体设计
根据需求分析,可以把这个系统的设计分为添加、修改、查询、浏览、统计、删除六大
- 3 -
模块,其中查询模块可以分为三个子模块,统计模块可以分为三个子模块,子模块下面还有子 函数;系统功能模块图如下所示:
五、详细设计
5.0 头文件及结构体
#include
char Cname[20]; char Cno[20]; };
struct Student
{
char Sname[20]; char Sex[10]; char Sno[20]; int Age;
struct Class CInfo; }StuInfo[N];
5.1 主函数
void main()
{
menu(); getchar(); }
//班级
//班名 //班号 //学生 //姓名 //性别 //学号
//年龄
//嵌套结构体,表示班级信息
//结构体数组,用作读取和存放临时数据 //菜单 - 4 -
5.2 菜单
void menu() {
int chose; int right; do
{
printf(\学生证管理系统\\n\
printf(\·······································\
printf(\ 菜单:\\t1-添加\\t2-修改\\t3-浏览全部\\t4-查询\\t5-统计\\t6-删除\\t7-退出\\n\ printf(\·······································\ printf(\请输入数字选择:\ scanf(\ if(chose<1||chose>8) {
right=1;
printf(\输入错误,请重新输入!\\n\ getchar(); }
else right=0;
- 5 -
}while(right==1);
switch(chose) { case 1:add(); break; //添加模块 case 2:modify(); break; //修改模块 case 3:browse(); break; //浏览模块 case 4:quiry(); break; //查询模块 case 5:stastic(); break; //统计模块 case 6:Delete(); break; //删除模块 case 7:exit(0); }
}
5.3 添加模块
首先要判断文件StuInfo.txt是否存在,如果存在就以读写(r+)的方式打开,如果不存在,就以写(w)的方式创建文件StuInfo.txt。输入格式要求:性别为男或女,学号为11位且不能重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。此外,如果以读写的方式打开,还要判断记录数num //退出 - 6 - void add() { int num; //表示记录数 int i; int age; //临时变量,用于验证输入的性别是否满足条件 char sno[20]; //临时变量,用于验证输入的学号是否满足条件 char sex[20]; //临时变量,用于验证输入的性别是否满足条件 char cno[20]; //临时变量,用于验证输入的班号是否满足条件 int right; FILE*fp; if((fp=fopen(\ //以读写方式打开 { if((fp=fopen(\ //文件不存在就创建文件 { printf(\文件不存在且创建失败,返回!\\n\ menu(); } printf(\请按照提示输入学生信息:\\n\\n\ printf(\姓名:\ scanf(\ do { printf(\性别(男或女):\ scanf(\ if((strcmp(sex,\男\女\ { printf(\输入错误,请输入男或女!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[0].Sex,sex); do { printf(\学号(11位):\ scanf(\ if(strlen(sno)!=11) { printf(\输入错误,学号长度应为11位数!\\n\ right=1; getchar(); } else right=0; - 7 - }while(right==1); strcpy(StuInfo[0].Sno,sno); do { printf(\年龄:\ scanf(\ if(age<=0||age>100) { printf(\年龄应在0-100之间,请重新输入年龄!\\n\ right=1; getchar(); } else right=0; }while(right==1); StuInfo[0].Age=age; do { printf(\班号(6位):\ scanf(\ if(strlen(cno)!=6) { printf(\输入错误,班号长度应为6位数!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[0].CInfo.Cno,cno); printf(\班名:\ scanf(\ fprintf(fp,\Info[0].CInfo.Cno,StuInfo[0].CInfo.Cname); fclose(fp); printf(\保存成功!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); } //以上的输入是以写的方式输入,下面是以读写的方式输入数据 for(i=0;!feof(fp);i++) { fscanf(fp,\nfo[i].CInfo.Cno,&StuInfo[i].CInfo.Cname); } - 8 - num=i; //记录数 if(num==N) { printf(\保存记录数超出结构体数组数的大小,请先修改N的值!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); } printf(\请按照提示输入学生信息:\\n\\n\ printf(\姓名:\ scanf(\ do { printf(\性别(男或女):\ scanf(\ if((strcmp(sex,\男\女\ { printf(\输入错误,请输入男或女!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[num].Sex,sex); do { printf(\学号(11位):\ scanf(\ if(strlen(sno)!=11) { printf(\输入错误,学号长度应为11位数!\\n\ right=1; getchar(); } else right=0; for(i=0;i { if(strcmp(sno,StuInfo[i].Sno)==0) { printf(\该学号已经存在,请重新输入!\\n\ right=1; getchar(); } - 9 - } }while(right==1); strcpy(StuInfo[num].Sno,sno); do { printf(\年龄:\ scanf(\ if(age<=0||age>100) { printf(\年龄应在0-100之间,请重新输入年龄!\\n\ right=1; getchar(); } else right=0; }while(right==1); StuInfo[num].Age=age; do { printf(\班号(6位):\ scanf(\ if(strlen(cno)!=6) { printf(\输入错误,班号长度应为6位数!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[num].CInfo.Cno,cno); printf(\班名:\ scanf(\ //把该记录写到文件末尾 fprintf(fp,\m].Age,StuInfo[num].CInfo.Cno,StuInfo[num].CInfo.Cname); fclose(fp); printf(\保存成功!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); } - 10 - } for(i=0;!feof(fp);i++) { fscanf(fp,\&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].Age, &StuInfo[i].CInfo.Cno,&StuInfo[i].CInfo.Cname); } num=i; fclose(fp); printf(\请输入学生学号:\ scanf(\ for(i=0;i { if(strcmp(no,StuInfo[i].Sno)==0) { found=i; printf(\该学生的信息为:\\n\\n\ printf(\姓名 性别 学号 年龄 班号 班名\\n\ printf(\nfo[found].Age,StuInfo[found].CInfo.Cno,StuInfo[found].CInfo.Cname); } } if(found<0) printf(\没有找到该班号的记录!\\n\ printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); quiry(); } 5.6.2 根据姓名查找某学生的学生证信息: void bySname() { int found=-1; int num; int i; char name[20]; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) - 16 - { fscanf(fp,\&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].Age, &StuInfo[i].CInfo.Cno,&StuInfo[i].CInfo.Cname); } num=i; fclose(fp); printf(\请输入学生姓名:\ scanf(\ for(i=0;i { if(strcmp(name,StuInfo[i].Sname)==0) { found=i; printf(\该学生的信息为:\\n\\n\ printf(\姓名 性别 学号 年龄 班号 班名\\n\ printf(\Info[found].Age,StuInfo[found].CInfo.Cno,StuInfo[found].CInfo.Cname); } if(found<0) printf(\没有找到该班号的记录!\\n\ printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); quiry(); } } 5.6.3 根据班号查询某个班级所有学生的 学生证信息: void byCno() { int found=-1; int num; int i; char ClaNO[20]; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) { - 17 - fscanf(fp,\&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].Age, &StuInfo[i].CInfo.Cno,&StuInfo[i].CInfo.Cname); } num=i; fclose(fp); printf(\请输入班号:\ scanf(\ printf(\该班级的学生信息为:\\n\\n\ printf(\姓名 性别 学号 年龄 班号 班名\\n\ for(i=0;i if(strcmp(ClaNO,StuInfo[i].CInfo.Cno)==0) { found=i; printf(\nfo[found].Age,StuInfo[found].CInfo.Cno,StuInfo[found].CInfo.Cname); } } if(found<0) //found小于0,说明不存在班号的学生记录 printf(\没有找到该班号的记录!\\n\ printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); quiry(); } 5.7 统计模块 该模块实现了基本的统计功能,包括 分别统计男女生的人数、平均年龄,以及 全体学生的人数和基本年龄; void stastic() { int chose; int right; do { printf(\全体男生\\t2-全体女生 \\t3-全体学生\\t4-返回\\n\ printf(\请输入数字选择:\ scanf(\ if(chose<1||chose>4) - 18 - { right=1; getchar(); } else right=0; }while(right==1); switch(chose) { case 1: Male(); //男生的统计信息 printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); stastic(); break; case 2: Female(); //女生的统计信息 printf(\请按enter键返回上级菜单!\\n\ getchar();getchar(); stastic(); break; case 3: StuMsg(); //全体学生的统计信息 printf(\请按enter键返回上级菜单!\\n\ getchar();getchar(); stastic(); } } break; case 4:menu(); 5.7.1 统计男生信息子模块 void Male() { int num; //人数 float mg; //平均年龄 num=MaleNum(); mg=MaleMG(); printf(\男生总人数为:%d\\n平均年 龄为:%f\\n\} 5.7.1.1 返回男生人数子函数 int MaleNum() { - 19 - int num; int count=0; int i; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) { fscanf(fp,\Info[i].CInfo.Cno,&StuInfo[i].CInfo.Cname); } fclose(fp); num=i; for(i=0;i { count++; } } return count; } 5.7.1.2 返回男生平均年龄 float MaleMG() { int num; int count=0; int found; float mAge=0; int i; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) { fscanf(fp,\ &StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].Age, - 20 - &StuInfo[i].CInfo.Cno,&StuInfo[i].CInfo.Cname); } fclose(fp); num=i; for(i=0;i count++; mAge+=StuInfo[i].Age; } } if(count>0) { mAge/=count; } return mAge; } 5.7.2 统计女生信息子模块 void Female() { int num; float mg; num=FemaleNum(); mg=FemaleMG(); printf(\女生总人数为:%d\\n平均年龄为:%f\\n\} 5.7.2.1 返回女生人数子函数 int FemaleNum() { int num; int count=0; int i; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) { - 21 - fscanf(fp,\StuInfo[i].CInfo.Cno,&StuInfo[i].CInfo.Cname); } fclose(fp); num=i; for(i=0;i count++; } } return count; } 5.7.2.2返回女生平均年龄 float FemaleMG() { int num; int count=0; int found; float mAge=0; int i; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) { fscanf(fp,\StuInfo[i].CInfo.Cno,&StuInfo[i].CInfo.Cname); } fclose(fp); num=i; for(i=0;i { found=i; count++; mAge+=StuInfo[i].Age; - 22 - } } if(count>0) { mAge/=count; } return mAge; } 5.7.3 全体学生统计信息子模块 void StuMsg() { int num; float mg; num=StuNum(); mg=MG(); printf(\学生总人数为:%d\\n学生平均年龄为:%f\\n\ Male(); Female(); } 5.7.3.1 返回全体学生的人数子函数 int StuNum() { int num; num=MaleNum()+FemaleNum(); return num; } 5.7.3.2 返回全体学生的平均年龄子函数 float MG() { float mAge; mAge=(MaleNum()*MaleMG()+FemaleNum()*FemaleMG())/(MaleNum()+FemaleNum()); return mAge; } 5.8 删除模块 void Delete() { int num; int i; - 23 - int found=-1; char StuNO[20]; FILE*fpr,*fpw; if((fpr=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fpr);i++) { fscanf(fpr,\ &StuInfo[i].Sname,&StuInfo[i].Sex, &StuInfo[i].Sno,&StuInfo[i].Age, &StuInfo[i].CInfo.Cno, &StuInfo[i].CInfo.Cname); } num=i; fclose(fpr); printf(\请输入学号选择你要删除的记录:\ scanf(\ for(i=0;i { if(strcmp(StuNO,StuInfo[i].Sno)==0) { found=i; printf(\你删除的学生信息为:\\n\\n\ printf(\姓名 性别 学号 年龄 班号 班名\\n\ printf(\Info[found].Age,StuInfo[found].CInfo.Cno,StuInfo[found].CInfo.Cname); if(found { for(found;found { strcpy(StuInfo[found].Sname,StuInfo[found+1].Sname); strcpy(StuInfo[found].Sex,StuInfo[found+1].Sex); strcpy(StuInfo[found].Sno,StuInfo[found+1].Sno); StuInfo[found].Age=StuInfo[found+1].Age; strcpy(StuInfo[found].CInfo.Cno,StuInfo[found+1].CInfo.Cno); strcpy(StuInfo[found].CInfo.Cname,StuInfo[found+1].CInfo.Cname); } } if((fpw=fopen(\ { printf(\文件打不开!\\n\ - 24 - menu(); } for(i=0;i { fprintf(fpw,\o[i].Age,StuInfo[i].CInfo.Cno,StuInfo[i].CInfo.Cname); } fclose(fpw); printf(\修改成功!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); } } if(found<0) { printf(\没有找到该学号的记录:\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); } } - 25 - 六、上机操作 6.1 系统说明 本系统存储信息的文本文件名为StuInfo.txt;该文件在程序主目录下,添加模块先采用读写的方式(r+)打开文件,如果不存在就以写的方式(w+)创建该文件,因此,假如该文件已存在,则也可以直接打开该文件进行浏览、编辑; 6.2 系统测试 6.2.1 浏览数据 - 26 - 6.2.2 添加数据 添加该生信息后浏览结果: - 27 - 6.2.3 修改数据 修改后的结果 - 28 - 6.2.4 查询记录 按学号查询: 按姓名查询: 按班级查询: - 29 - 6.2.5 统计数据 男生统计信息: 女生统计信息: 全体学生统计信息: - 30 - 6.2.6 删除记录 删除后的结果: - 31 - 七、总结 本次C语言课程设计非常有意义,它锻炼了我们解决实际问题的能力。由于本人对编程 感兴趣,在编程方面有一定基础,因此尝试着由自己完成整个系统,在设计的过程里也遇到了很多麻烦,但是通过查询参考书和网络,一个个疑难迎刃而解。通过这次实践课,不只是强化了我们C语言编程的能力,更重要的是使我们学会了一种工作方法,学会了如何规划、组织、设计、实施项目,从整体到局部,从局部又到整体。此外,在设计流程图和编制报告的过程里也学了不少东西,学会了用office visio制作流程图,学会了组织报告等等。 八、源代码 #include struct Class //班级 //班名 //班号 //学生 //姓名 //性别 //学号 //年龄 //嵌套结构体,表示班级信息 { char Cname[20]; char Cno[20]; }; struct Student { char Sname[20]; char Sex[10]; char Sno[20]; int Age; struct Class CInfo; }StuInfo[N]; void menu(); //主菜单 void add(); //添加模块 void modify(); //修改模块 void Delete(); //删除模块 void browse(); //浏览模块 void quiry(); //查询模块 void stastic(); //统计模块 void bySname(); //按姓名查询,子模块 void bySno(); //按学号查询,子模块 void byCno(); //按班号查询,子模块 - 32 - void StuMsg(); //返回全体学生统计信息,子模块 void Female(); //女生统计信息,子模块 void Male(); //男生统计信息,子模块 int FemaleNum(); //返回女生人数,子函数 float FemaleMG(); //返回女生平均年龄,子函数 int MaleNum(); //返回男生人数,子函数 float MaleMG(); //返回男生平均年龄,子函数 int StuNum(); //返回全体学生人数,子函数 float MG(); //返回全体学生的平均年龄,子函数 void main() { menu(); getchar(); } void menu() //菜单 { int chose; int right; do { system(\ //清屏 printf(\学生证管理系统\\n\ printf(\·······································\ printf(\ 菜单:\\t1-添加\\t2-修改\\t3-浏览全部\\t4-查询\\t5-统计\\t6-删除\\t7-退出\\n\ printf(\·······································\ printf(\请输入数字选择:\ scanf(\ if(chose<1||chose>7) { printf(\输入错误,请重新输入!\\n\ right=1; getchar(); } else right=0; }while(right==1); switch(chose) { case 1:add(); break; case 2:modify(); break; case 3:browse(); break; case 4:quiry(); break; case 5:stastic(); break; - 33 - case 6:Delete(); break; case 7:exit(0); } } void add() //添加学生信息,一次添加一条记录 { int num; int i; int age; char sno[20]; char sex[20]; char cno[20]; int right; FILE*fp; if((fp=fopen(\ //以读写方式打开 { if((fp=fopen(\文件不存在则创建文件 { printf(\文件不存在且创建失败,返回!\\n\ menu(); } printf(\请按照提示输入学生信息:\\n\\n\ printf(\姓名:\ scanf(\ do { printf(\性别(男或女):\ scanf(\ if((strcmp(sex,\男\女\ { printf(\输入错误,请输入男或女!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[0].Sex,sex); do { printf(\学号(11位):\ scanf(\ if(strlen(sno)!=11) { - 34 - printf(\输入错误,学号长度应为11位数!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[0].Sno,sno); do { printf(\年龄:\ scanf(\ if(age<=0||age>100) { printf(\年龄应在0-100之间,请重新输入年龄!\\n\ right=1; getchar(); } else right=0; }while(right==1); StuInfo[0].Age=age; do { printf(\班号(6位):\ scanf(\ if(strlen(cno)!=6) { printf(\输入错误,班号长度应为6位数!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[0].CInfo.Cno,cno); printf(\班名:\ scanf(\ fprintf(fp,\].CInfo.Cno,StuInfo[0].CInfo.Cname); fclose(fp); printf(\保存成功!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); - 35 - } for(i=0;!feof(fp);i++) //读取文件 { fscanf(fp,\CInfo.Cno,&StuInfo[i].CInfo.Cname); } num=i; if(num==N) { printf(\保存记录数超出结构体数组数的大小,请先修改N的值\\n\ menu(); } printf(\请按照提示输入学生信息:\\n\\n\ printf(\姓名:\ scanf(\ do { printf(\性别(男或女):\ scanf(\ if((strcmp(sex,\男\女\ { printf(\输入错误,请输入男或女!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[num].Sex,sex); do { printf(\学号(11位):\ scanf(\ if(strlen(sno)!=11) { printf(\输入错误,学号长度应为11位数!\\n\ right=1; getchar(); } else right=0; for(i=0;i { if(strcmp(sno,StuInfo[i].Sno)==0) { - 36 - printf(\该学号已经存在,请重新输入!\\n\ right=1; getchar(); } } }while(right==1); strcpy(StuInfo[num].Sno,sno); do { printf(\年龄:\ scanf(\ if(age<=0||age>100) { printf(\年龄应在0-100之间,请重新输入年龄!\\n\ right=1; getchar(); } else right=0; }while(right==1); StuInfo[num].Age=age; do { printf(\班号(6位):\ scanf(\ if(strlen(cno)!=6) { printf(\输入错误,班号长度应为6位数!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[num].CInfo.Cno,cno); printf(\班名:\ scanf(\ //把该记录写到文件末尾 fprintf(fp,\Age,StuInfo[num].CInfo.Cno,StuInfo[num].CInfo.Cname); fclose(fp); printf(\保存成功!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); - 37 - menu(); } void modify() { int num; int i; int right; int age; char sex[20]; char cno[20]; char sno[20]; int found=-1; char StuNO[20]; FILE*fpr,*fpw; if((fpr=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fpr);i++) //读取文件 { fscanf(fpr,\CInfo.Cno,&StuInfo[i].CInfo.Cname); } num=i; fclose(fpr); printf(\请输入学号选择要修改的记录:\ scanf(\ for(i=0;i if(strcmp(StuNO,StuInfo[i].Sno)==0) { found=i; printf(\你要修改的学生信息为:\\n\\n\ printf(\姓名 性别 学号 年龄 班号 班名\\n\ //修改学生信息 printf(\o.Cno,StuInfo[i].CInfo.Cname); printf(\请按照提示输入学生的新信息:\\n\ printf(\姓名:\ scanf(\ do - 38 - { printf(\性别(男或女):\ scanf(\ if((strcmp(sex,\男\女\ { printf(\输入错误,请输入男或女!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[found].Sex,sex); do { printf(\学号(11位):\ scanf(\ if(strlen(sno)!=11) { printf(\输入错误,学号长度应为11位数!\\n\ right=1; getchar(); } else right=0; for(i=0;i if((i!=found)&&(strcmp(sno,StuInfo[i].Sno)==0)) { printf(\该学号已经存在,请重新输入!\\n\ right=1; getchar(); } } }while(right==1); strcpy(StuInfo[found].Sno,sno); do { printf(\年龄:\ scanf(\ if(age<=0||age>100) { printf(\年龄应在0-100之间,请重新输入年龄!\\n\ right=1; getchar(); } - 39 - else right=0; }while(right==1); StuInfo[found].Age=age; do { printf(\班号(6位):\ scanf(\ if(strlen(cno)!=6) { printf(\输入错误,班号长度应为6位数!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(StuInfo[found].CInfo.Cno,cno); printf(\班名:\ scanf(\ if((fpw=fopen(\ { printf(\文件打不开,保存失败!\\n\ menu(); } for(i=0;i { fprintf(fpw,\.CInfo.Cno,StuInfo[i].CInfo.Cname); } fclose(fpw); printf(\修改成功!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); } if(found<0) { printf(\没有找到该学号的记录:\\n\ printf(\请按enter键返回主菜单!\\n\ } getchar(); getchar(); menu(); - 40 - } } void browse() { int num; int i; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) //读取文件 { //显示所有学生信息 fscanf(fp,\CInfo.Cno,&StuInfo[i].CInfo.Cname); } fclose(fp); num=i; printf(\已添加%d个学生信息\\n\\n\ printf(\姓名 性别 学号 年龄 班号 班名\\n\ for(i=0;i printf(\ %s %s %d %s %s\\n\Info[i].CInfo.Cno,StuInfo[i].CInfo.Cname); } printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); } void quiry() { int chose; int right; do { system(\ printf(\按学号查询\\t2-按姓名查询\\t3-某班学生信息\\t4-返回\\n\ printf(\请输入数字选择:\ scanf(\ if(chose<1||chose>4) - 41 - { right=1; getchar(); } else right=0; } }while(right==1); switch(chose) { case 1:bySno();break; } case 2:bySname();break; case 3:byCno();break; case 4:menu(); void bySno() { int found=-1; int num; int i; char no[20]; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) //读取文件 { fscanf(fp,\CInfo.Cno,&StuInfo[i].CInfo.Cname); } num=i; fclose(fp); printf(\请输入学生学号:\ scanf(\ for(i=0;i if(strcmp(no,StuInfo[i].Sno)==0) { found=i; printf(\该学生的信息为:\\n\\n\ printf(\姓名 性别 学号 年龄 班号 班名\\n\ - 42 - printf(\.Age,StuInfo[found].CInfo.Cno,StuInfo[found].CInfo.Cname); } } if(found<0) printf(\没有找到该班号的记录!\\n\ printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); quiry(); } void bySname() { int found=-1; int num; int i; char name[20]; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) //读取文件 { fscanf(fp,\CInfo.Cno,&StuInfo[i].CInfo.Cname); } num=i; fclose(fp); printf(\请输入学生姓名:\ scanf(\ printf(\叫该姓名的学生信息为:\\n\\n\ printf(\姓名 性别 学号 年龄 班号 班名\\n\ for(i=0;i if(strcmp(name,StuInfo[i].Sname)==0) { found=i; printf(\ - 43 - .Age,StuInfo[found].CInfo.Cno,StuInfo[found].CInfo.Cname); } } if(found<0) printf(\没有找到该班号的记录!\\n\ printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); quiry(); } void byCno() { int found=-1; int num; int i; char ClaNO[20]; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) //读取文件 { fscanf(fp,\CInfo.Cno,&StuInfo[i].CInfo.Cname); } num=i; fclose(fp); printf(\请输入班号:\ scanf(\ printf(\该班级的学生信息为:\\n\\n\ printf(\姓名 性别 学号 年龄 班号 班名\\n\ for(i=0;i if(strcmp(ClaNO,StuInfo[i].CInfo.Cno)==0) { found=i; printf(\.Age,StuInfo[found].CInfo.Cno,StuInfo[found].CInfo.Cname); } - 44 - } if(found<0) printf(\没有找到该班号的记录!\\n\ printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); quiry(); } void stastic() { int chose; int right; do { system(\ printf(\全体男生\\t2-全体女生\\t3-全体学生\\t4-返回\\n\ printf(\请输入数字选择:\ scanf(\ if(chose<1||chose>4) { right=1; getchar(); } else right=0; }while(right==1); switch(chose) { case 1: Male(); printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); stastic(); break; case 2: Female(); printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); stastic(); break; case 3: StuMsg(); - 45 - printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); stastic(); break; } case 4:menu(); } void Male() { int num; //男生基本统计信息 float mg; num=MaleNum(); mg=MaleMG(); printf(\男生总人数为:%d\\n平均年龄为:%f\\n\} int MaleNum() //男生人数 { int num; int count=0; int i; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) //读取文件 { fscanf(fp,\CInfo.Cno,&StuInfo[i].CInfo.Cname); } fclose(fp); num=i; for(i=0;i { count++; } } - 46 - return count; } float MaleMG() //男生平均年龄 { int num; int count=0; int found; float mAge=0; int i; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) //读取文件 { fscanf(fp,\CInfo.Cno,&StuInfo[i].CInfo.Cname); } fclose(fp); num=i; for(i=0;i { if(strcmp(\男\ { found=i; count++; mAge+=StuInfo[i].Age; } } if(count>0) { mAge/=count; } return mAge; } int FemaleNum() //女生人数 { int num; int count=0; - 47 - int i; FILE*fp; if((fp=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) //读取文件 { fscanf(fp,\CInfo.Cno,&StuInfo[i].CInfo.Cname); } fclose(fp); num=i; for(i=0;i { count++; } } return count; } void Female() //女生基本统计信息 { int num; float mg; num=FemaleNum(); mg=FemaleMG(); printf(\女生总人数为:%d\\n平均年龄为:%f\\n\} float FemaleMG() //女生平均年龄 { int num; int count=0; int found; float mAge=0; int i; FILE*fp; if((fp=fopen(\ { - 48 - printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fp);i++) //读取文件 { fscanf(fp,\CInfo.Cno,&StuInfo[i].CInfo.Cname); } fclose(fp); num=i; for(i=0;i count++; mAge+=StuInfo[i].Age; } } if(count>0) { mAge/=count; } return mAge; } void StuMsg() //全体学生基本统计信息 { int num; float mg; num=StuNum(); mg=MG(); printf(\学生总人数为:%d\\n学生平均年龄为:%f\\n\ Male(); Female(); } int StuNum() //全体学生人数 { int num; num=MaleNum()+FemaleNum(); return num; } - 49 - float MG() //全体学生平均年龄 { float mAge; mAge=(MaleNum()*MaleMG()+FemaleNum()*FemaleMG())/(MaleNum()+FemaleNum()); return mAge; } void Delete() { int num; int i; int found=-1; char StuNO[20]; FILE*fpr,*fpw; if((fpr=fopen(\ { printf(\文件打不开!\\n\ menu(); } for(i=0;!feof(fpr);i++) //读取文件 { fscanf(fpr,\CInfo.Cno,&StuInfo[i].CInfo.Cname); } num=i; fclose(fpr); printf(\请输入学号选择你要删除的记录:\ scanf(\ for(i=0;i if(strcmp(StuNO,StuInfo[i].Sno)==0) { found=i; printf(\你删除的学生信息为:\\n\\n\ printf(\姓名 性别 学号 年龄 班号 班名\\n\ printf(\.Age,StuInfo[found].CInfo.Cno,StuInfo[found].CInfo.Cname); if(found { for(found;found - 50 -
正在阅读:
学生证管理系统(C语言课程设计)01-12
质量管理统计方法06-07
计算机组成原理第三章参考答案 白中英主编11-06
公务员求职动机与岗位匹配性范文05-31
励志的名人名言名句摘抄11-20
2016-2021年中国铝镁合金门市场深度调研及投资策略分析报告(目录) - 图文10-05
人教a版六年级语文上册《我的第一首诗》11-09
信息安全数学基础_环和域基础知识06-02
活动名称小班蒙氏数学按一种特征分类03-27
HYPACK操作手册10-11
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 学生证
- 语言
- 课程
- 设计
- 系统
- 管理
- 现代汉语综合练习题
- 自由经济中私人利益的追求与公共道德追求的矛盾辨析
- 秦汉史尔雅课后答案
- 在党支部换届选举大会上的讲话
- FreeSwitch—CallCenter
- 中学数学教学中后进生的转化
- 社工面试30题
- 加法器及差分放大器项目实验报告 - 图文
- 2018届湖北省荆州中学高三全真模拟考试(一)理综生物试(解析版)
- 某六层框架宿舍楼结构设计计算书
- 放大器编程说明
- 夸奖学生的评语
- 高考物理总复习6.2电场能的性质课堂检测
- 高中化学必修2讲义
- 统计调查与统计整理复习题
- 三年级家乡的景物作文教学设计
- 同济大学研究生学术行为规范--试题库
- (2013年新2) 复件 110102回风顺槽探放水设计
- 一般进出口货物 试题
- 2013年安全工程师《安全生产事故案例分析》实战模拟试题(3)-中大网校