红河学院工学院课程设计报告专业:年级:姓名:成绩:批改时间:红河学院工学院编制说明1、本报告供学生课程设计时使用。
2、学生应认真阅读课程设计要求。
3、课程设计报告里面的内容要手工填写,以备存档使用(源程序可打印)。
4、课程设计的总评成绩根据课程的性质,按一定比例计入该门课程成绩。
5、课程设计报告中的各模块填写的内容是评分的主要依据,如果不够书写,可以自行添加附页。
6、按规定的时间提交报告给教师评定成绩,由任课教师交到工学院存档。
课程设计目录课程名称:高级语言程序设计设计任务二.设计流程图根据需求分析,可以把这个系统的设计分为添加、修改、查询、浏览、统计、删除六大模块,其中查询模块可以分为三个子模块,统计模块可以分为三个子模块,子模块下面还有子函数;系统功能模块图如下所示:1.主函数模块2.添加模块3.修改模块4.浏览模块开始(fpr=fopen("StuInfo.txt","r"))==NULL读取文件输入学号根据提示输入新信息(fpw=fopen("StuInfo.txt","w"))==NULL保存数据主菜单是否存在该学号的记录否是否是否是5.查询模块6.统计模块7.删出模块三.程序代码#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 100struct 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(); //按班号查询,子模块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("cls"); //清屏printf("\n\t\t\t\t学生证管理系统\n");printf("········································");printf(" 菜单:\t1-添加\t2-修改\t3-浏览全部\t4-查询\t5-统计\t6-删除\t7-退出\n");printf("········································");printf("请输入数字选择:");scanf("%d",&chose);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;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("StuInfo.txt","r+"))==NULL) //以读写方式打开{if((fp=fopen("StuInfo.txt","w"))==NULL) //文件不存在则创建文件{printf("\n文件不存在且创建失败,返回!\n");menu();}printf("\n请按照提示输入学生信息:\n\n");printf("姓名:");scanf("%s",&StuInfo[0].Sname);do{printf("\n性别(男或女):");scanf("%s",sex);if((strcmp(sex,"男")!=0)&&(strcmp(sex,"女")!=0)) {printf("输入错误,请输入男或女!\n");right=1;getchar();}else right=0;}while(right==1);strcpy(StuInfo[0].Sex,sex);do{printf("\n学号(11位):");scanf("%s",sno);if(strlen(sno)!=11){printf("输入错误,学号长度应为11位数!\n");right=1;getchar();}else right=0;}while(right==1);strcpy(StuInfo[0].Sno,sno);do{printf("\n年龄:");scanf("%d",&age);if(age<=0||age>100){printf("年龄应在0-100之间,请重新输入年龄!\n");right=1;getchar();}else right=0;}while(right==1);StuInfo[0].Age=age;do{printf("\n班号(6位):");scanf("%s",cno);if(strlen(cno)!=6){printf("输入错误,班号长度应为6位数!\n");right=1;getchar();else right=0;}while(right==1);strcpy(StuInfo[0]o,cno);printf("\n班名:");scanf("%s",&StuInfo[0]ame);fprintf(fp,"\n%s\t%s\t%s\t%d\t%s\t%s",StuInfo[0].Sname,StuInfo[0].Sex,StuInfo[0].Sno,StuInfo[ 0].Age,StuInfo[0]o,StuInfo[0]ame);fclose(fp);printf("\n保存成功!\n");printf("\n请按enter键返回主菜单!\n");getchar();getchar();menu();}for(i=0;!feof(fp);i++) //读取文件{fscanf(fp,"%s%s%s%d%s%s",&StuInfo[i].Sname,&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].A ge,&StuInfo[i]o,&StuInfo[i]ame);}num=i;if(num==N){printf("\n保存记录数超出结构体数组数的大小,请先修改N的值\n");menu();}printf("\n请按照提示输入学生信息:\n\n");printf("姓名:");scanf("%s",&StuInfo[num].Sname);do{printf("\n性别(男或女):");scanf("%s",sex);if((strcmp(sex,"男")!=0)&&(strcmp(sex,"女")!=0)){printf("输入错误,请输入男或女!\n");right=1;getchar();}else right=0;}while(right==1);strcpy(StuInfo[num].Sex,sex);{printf("\n学号(11位):");scanf("%s",sno);if(strlen(sno)!=11){printf("输入错误,学号长度应为11位数!\n");right=1;getchar();}else right=0;for(i=0;i<num;i++){if(strcmp(sno,StuInfo[i].Sno)==0){printf("该学号已经存在,请重新输入!\n");right=1;getchar();}}}while(right==1);strcpy(StuInfo[num].Sno,sno);do{printf("\n年龄:");scanf("%d",&age);if(age<=0||age>100){printf("年龄应在0-100之间,请重新输入年龄!\n");right=1;getchar();}else right=0;}while(right==1);StuInfo[num].Age=age;do{printf("\n班号(6位):");scanf("%s",cno);if(strlen(cno)!=6){printf("输入错误,班号长度应为6位数!\n");right=1;getchar();else right=0;}while(right==1);strcpy(StuInfo[num]o,cno);printf("\n班名:");scanf("%s",&StuInfo[num]ame);//把该记录写到文件末尾fprintf(fp,"\n%s\t%s\t%s\t%d\t%s\t%s",StuInfo[num].Sname,StuInfo[num].Sex,StuInfo[num].Sno ,StuInfo[num].Age,StuInfo[num]o,StuInfo[num]ame);fclose(fp);printf("\n保存成功!\n");printf("\n请按enter键返回主菜单!\n");getchar();getchar();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("StuInfo.txt","r"))==NULL){printf("文件打不开!\n");menu();}for(i=0;!feof(fpr);i++) //读取文件{fscanf(fpr,"%s%s%s%d%s%s",&StuInfo[i].Sname,&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i]. Age,&StuInfo[i]o,&StuInfo[i]ame);}num=i;fclose(fpr);printf("\n请输入学号选择要修改的记录:");scanf("%s",StuNO);for(i=0;i<num;i++){if(strcmp(StuNO,StuInfo[i].Sno)==0){found=i;printf("\n你要修改的学生信息为:\n\n");printf("姓名性别学号年龄班号班名\n");printf("%s\t%s\t%s\t%d\t%s\t%s\n",StuInfo[i].Sname,StuInfo[i].Sex,StuInfo[i].Sno,StuInfo[i].Age ,StuInfo[i]o,StuInfo[i]ame);printf("\n请按照提示输入学生的新信息:\n");printf("姓名:");scanf("%s",&StuInfo[found].Sname);do{printf("\n性别(男或女):");scanf("%s",sex);if((strcmp(sex,"男")!=0)&&(strcmp(sex,"女")!=0)){printf("输入错误,请输入男或女!\n");right=1;getchar();}else right=0;}while(right==1);strcpy(StuInfo[found].Sex,sex);do{printf("\n学号(11位):");scanf("%s",sno);if(strlen(sno)!=11){printf("输入错误,学号长度应为11位数!\n");right=1;getchar();}else right=0;for(i=0;i<num;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("\n年龄:");scanf("%d",&age);if(age<=0||age>100){printf("年龄应在0-100之间,请重新输入年龄!\n");right=1;getchar();}else right=0;}while(right==1);StuInfo[found].Age=age;do{printf("\n班号(6位):");scanf("%s",cno);if(strlen(cno)!=6){printf("输入错误,班号长度应为6位数!\n");right=1;getchar();}else right=0;}while(right==1);strcpy(StuInfo[found]o,cno);printf("\n班名:");scanf("%s",&StuInfo[found]ame);if((fpw=fopen("StuInfo.txt","w"))==NULL){printf("文件打不开,保存失败!\n");menu();}for(i=0;i<num;i++) //保存文件{fprintf(fpw,"\n%s\t%s\t%s\t%d\t%s\t%s",StuInfo[i].Sname,StuInfo[i].Sex,StuInfo[i].Sno,StuInfo[i ].Age,StuInfo[i]o,StuInfo[i]ame);}fclose(fpw);printf("\n修改成功!\n");printf("\n请按enter键返回主菜单!\n");getchar();getchar();menu();}}if(found<0){printf("\n没有找到该学号的记录:\n");printf("\n请按enter键返回主菜单!\n");getchar();getchar();menu();}}void browse() //显示所有学生信息{int num;int i;FILE*fp;if((fp=fopen("StuInfo.txt","r"))==NULL){printf("文件打不开!\n");menu();}for(i=0;!feof(fp);i++) //读取文件{fscanf(fp,"%s%s%s%d%s%s",&StuInfo[i].Sname,&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].A ge,&StuInfo[i]o,&StuInfo[i]ame);}fclose(fp);num=i;printf("\n已添加%d个学生信息\n\n",num);printf("姓名性别学号年龄班号班名\n");for(i=0;i<num;i++) //输出{printf("%s %s %s %d %s %s\n",StuInfo[i].Sname,StuInfo[i].Sex,StuInfo[i].Sno,St uInfo[i].Age,StuInfo[i]o,StuInfo[i]ame);}printf("\n请按enter键返回主菜单!\n");getchar();getchar();menu();}void quiry(){int chose;int right;do{system("cls");printf("\n\t1-按学号查询\t2-按姓名查询\t3-某班学生信息\t4-返回\n");printf("\n请输入数字选择:");scanf("%d",&chose);if(chose<1||chose>4){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("StuInfo.txt","r"))==NULL){printf("文件打不开!\n");menu();}for(i=0;!feof(fp);i++) //读取文件{fscanf(fp,"%s%s%s%d%s%s",&StuInfo[i].Sname,&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].A ge,&StuInfo[i]o,&StuInfo[i]ame);}num=i;fclose(fp);printf("\n请输入学生学号:");scanf("%s",no);for(i=0;i<num;i++){if(strcmp(no,StuInfo[i].Sno)==0){found=i;printf("\n该学生的信息为:\n\n");printf("姓名性别学号年龄班号班名\n");printf("%s\t%s\t%s\t%d\t%s\t%s\n",StuInfo[found].Sname,StuInfo[found].Sex,StuInfo[found].Sn o,StuInfo[found].Age,StuInfo[found]o,StuInfo[found]ame);}}if(found<0)printf("\n没有找到该班号的记录!\n");printf("\n请按enter键返回上级菜单!\n");getchar();getchar();quiry();}void bySname(){int found=-1;int num;int i;char name[20];FILE*fp;if((fp=fopen("StuInfo.txt","r"))==NULL){printf("文件打不开!\n");menu();}for(i=0;!feof(fp);i++) //读取文件{fscanf(fp,"%s%s%s%d%s%s",&StuInfo[i].Sname,&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].Age,&StuInfo[i]o,&StuInfo[i]ame);}num=i;fclose(fp);printf("\n请输入学生姓名:");scanf("%s",name);printf("\n叫该姓名的学生信息为:\n\n");printf("姓名性别学号年龄班号班名\n");for(i=0;i<num;i++){if(strcmp(name,StuInfo[i].Sname)==0){found=i;printf("%s\t%s\t%s\t%d\t%s\t%s\n",StuInfo[found].Sname,StuInfo[found].Sex,StuInfo[found].Sn o,StuInfo[found].Age,StuInfo[found]o,StuInfo[found]ame);}}if(found<0)printf("\n没有找到该班号的记录!\n");printf("\n请按enter键返回上级菜单!\n");getchar();getchar();quiry();}void byCno(){int found=-1;int num;int i;char ClaNO[20];FILE*fp;if((fp=fopen("StuInfo.txt","r"))==NULL){printf("文件打不开!\n");menu();}for(i=0;!feof(fp);i++) //读取文件{fscanf(fp,"%s%s%s%d%s%s",&StuInfo[i].Sname,&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].A ge,&StuInfo[i]o,&StuInfo[i]ame);}num=i;fclose(fp);printf("\n请输入班号:");scanf("%s",ClaNO);printf("\n该班级的学生信息为:\n\n");printf("姓名性别学号年龄班号班名\n");for(i=0;i<num;i++){if(strcmp(ClaNO,StuInfo[i]o)==0){found=i;printf("%s\t%s\t%s\t%d\t%s\t%s\n",StuInfo[found].Sname,StuInfo[found].Sex,StuInfo[found].Sn o,StuInfo[found].Age,StuInfo[found]o,StuInfo[found]ame);}}if(found<0)printf("\n没有找到该班号的记录!\n");printf("\n请按enter键返回上级菜单!\n");getchar();getchar();quiry();}void stastic(){int chose;int right;do{system("cls");printf("\n\t1-全体男生\t2-全体女生\t3-全体学生\t4-返回\n");printf("\n请输入数字选择:");scanf("%d",&chose);if(chose<1||chose>4){right=1;getchar();}else right=0;}while(right==1);switch(chose){case 1:Male();printf("\n请按enter键返回上级菜单!\n");getchar();getchar();stastic();break;case 2:Female();printf("\n请按enter键返回上级菜单!\n");getchar();getchar();stastic();break;case 3:StuMsg();printf("\n请按enter键返回上级菜单!\n");getchar();getchar();stastic();break;case 4:menu();}}void Male() //男生基本统计信息{int num;float mg;num=MaleNum();mg=MaleMG();printf("\n男生总人数为:%d\n平均年龄为:%f\n",num,mg); }int MaleNum() //男生人数{int num;int count=0;int i;FILE*fp;if((fp=fopen("StuInfo.txt","r"))==NULL){printf("文件打不开!\n");menu();}for(i=0;!feof(fp);i++) //读取文件{fscanf(fp,"%s%s%s%d%s%s",&StuInfo[i].Sname,&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].A ge,&StuInfo[i]o,&StuInfo[i]ame);}fclose(fp);num=i;for(i=0;i<num;i++){if(strcmp("男",StuInfo[i].Sex)==0){count++;}}return count;}float MaleMG() //男生平均年龄{int num;int count=0;int found;float mAge=0;int i;FILE*fp;if((fp=fopen("StuInfo.txt","r"))==NULL){printf("文件打不开!\n");menu();}for(i=0;!feof(fp);i++) //读取文件{fscanf(fp,"%s%s%s%d%s%s",&StuInfo[i].Sname,&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].A ge,&StuInfo[i]o,&StuInfo[i]ame);}fclose(fp);num=i;for(i=0;i<num;i++){if(strcmp("男",StuInfo[i].Sex)==0){found=i;count++;mAge+=StuInfo[i].Age;}}if(count>0){mAge/=count;}return mAge;}int FemaleNum() //女生人数{int num;int count=0;int i;FILE*fp;if((fp=fopen("StuInfo.txt","r"))==NULL){printf("文件打不开!\n");menu();}for(i=0;!feof(fp);i++) //读取文件{fscanf(fp,"%s%s%s%d%s%s",&StuInfo[i].Sname,&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].A ge,&StuInfo[i]o,&StuInfo[i]ame);}fclose(fp);num=i;for(i=0;i<num;i++){if(strcmp("女",StuInfo[i].Sex)==0){count++;}}return count;}void Female() //女生基本统计信息{int num;float mg;num=FemaleNum();mg=FemaleMG();printf("\n女生总人数为:%d\n平均年龄为:%f\n",num,mg);}float FemaleMG() //女生平均年龄{int num;int count=0;int found;float mAge=0;int i;FILE*fp;if((fp=fopen("StuInfo.txt","r"))==NULL){printf("文件打不开!\n");menu();}for(i=0;!feof(fp);i++) //读取文件{fscanf(fp,"%s%s%s%d%s%s",&StuInfo[i].Sname,&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i].A ge,&StuInfo[i]o,&StuInfo[i]ame);}fclose(fp);num=i;for(i=0;i<num;i++){if(strcmp("女",StuInfo[i].Sex)==0){found=i;count++;mAge+=StuInfo[i].Age;}}if(count>0){mAge/=count;}return mAge;}void StuMsg() //全体学生基本统计信息{int num;float mg;num=StuNum();mg=MG();printf("\n学生总人数为:%d\n学生平均年龄为:%f\n",num,mg);Male();Female();}int StuNum() //全体学生人数{int num;num=MaleNum()+FemaleNum();return num;}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("StuInfo.txt","r"))==NULL){printf("文件打不开!\n");menu();}for(i=0;!feof(fpr);i++) //读取文件{fscanf(fpr,"%s%s%s%d%s%s",&StuInfo[i].Sname,&StuInfo[i].Sex,&StuInfo[i].Sno,&StuInfo[i]. Age,&StuInfo[i]o,&StuInfo[i]ame);}num=i;fclose(fpr);printf("\n请输入学号选择你要删除的记录:");scanf("%s",StuNO);for(i=0;i<num;i++){if(strcmp(StuNO,StuInfo[i].Sno)==0){found=i;printf("\n你删除的学生信息为:\n\n");printf("姓名性别学号年龄班号班名\n");printf("%s\t%s\t%s\t%d\t%s\t%s\n",StuInfo[found].Sname,StuInfo[found].Sex,StuInfo[found].Sn o,StuInfo[found].Age,StuInfo[found]o,StuInfo[found]ame);if(found<num-1){for(found;found<num-1;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]o,StuInfo[found+1]o);strcpy(StuInfo[found]ame,StuInfo[found+1]ame);}}if((fpw=fopen("StuInfo.txt","w"))==NULL){printf("文件打不开!\n");menu();}for(i=0;i<num-1;i++) //保存文件{fprintf(fpw,"\n%s\t%s\t%s\t%d\t%s\t%s",StuInfo[i].Sname,StuInfo[i].Sex,StuInfo[i].Sno,StuInfo[i ].Age,StuInfo[i]o,StuInfo[i]ame);}fclose(fpw);printf("\n修改成功!\n");printf("\n请按enter键返回主菜单!\n");getchar();getchar();menu();}}if(found<0){printf("\n没有找到该学号的记录:\n");printf("\n请按enter键返回主菜单!\n");getchar();getchar();menu();}}四.运行结果主界面五、课程设计过程问题讨论(此模块内容请手工填写)课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,C语言设计已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。