学生证管理系统(C语言课程设计).doc_第1页
学生证管理系统(C语言课程设计).doc_第2页
学生证管理系统(C语言课程设计).doc_第3页
学生证管理系统(C语言课程设计).doc_第4页
学生证管理系统(C语言课程设计).doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言课程设计报告学 院: 计算机学院 专 业: 网络工程题 目: 学生证管理系统 班序号 : 19313126 学 号: 20131004080 姓 名: 赵清华2013年12月31日报告目录一、 实习内容要求3 二、需求分析 3三、总体设计 3四、设计简介 44.0 头文件 44.1 主函数 54.2 子函数菜单 54.3 子函数添加 54.4 子函数修改 10 4.5 子函数浏览 134.6 子函数查询 144.7 子函数统计 184.8 子函数删除 23五、上机操作 25 5.1 系统说明 255.2 系统测试 25 六、总结 _31一、实习内容要求1、用C语言编写一个学生证管理系统,该系统具有以下功能: (1)录入某位学生的学生证信息;(2)给定学号,显示某位学生的学生证信息;(3)给定某个班级的班号,显示该班所有学生的学生证信息;(4)给定某位学生的学号,修改该学生的学生证信息;(5)给定某位学生的学号,删除该学生的学生证信息;(6)提供一些统计各类信息的功能;(7)提供浏览所有学生的学生证信息的功能。2、输入要求应用程序运行后,在屏幕上显示一个菜单;用户可以根据要求,选定相应的操作项目;进入某个操作后,根据应用程序的提示,从键盘输入相应的信息。3、输出要求(1)应用程序运行后,要在屏幕上显示一个菜单;(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。二、需求分析学生证信息采用文件存储,因而要提供问价的输入/输出操作;要根据给定的学号或班号进行相应操作,要提供查找操作;实现一些统计给雷信息的功能要提供统计操作;另外,还要提供键盘式选择菜单以实现功能选择。三、总体设计这个程序被设计成数据输入模块、数据查找模块、数据子函数删除和数据子函数统计。即:添加,修改、查询,浏览、删除,统计等,如下图所示:四、设计简介4.0 头文件#include#include#include#define N 100struct Class char Cname20;/班名 char Cno20; /班号;struct Student/学生 char Sname20;/姓名 char Sex10; /性别 char Sno20; /学号 int Age; /年龄 struct Class CInfo; /嵌套结构体,表示班级信息StuInfoN; /结构体数组,用作读取和存放临时数据4.1 主函数void main() menu(); getchar();4.2 子函数菜单void menu() int chose; int right; do printf(ntttt学生证管理系统n); printf(*n); printf(tttt1.添加学生信息);printf(ntttt2.修改学生信息);printf(ntttt3.全部学生信息);printf(ntttt4.查询学生信息); printf(ntttt5.统计学生信息); printf(ntttt6.删除学生信息);printf(ntttt7.退出系统n); printf(*); printf(请输入数字选择:); scanf(%d,&chose); if(chose8) right=1; printf(输入错误,请重新输入!n); 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); /退出 4.3 子函数添加首先要判断文件StuInfo.txt是否存在,如果存在就以读写(r+)的方式打开,如果不存在,就以写(w)的方式创建文件StuInfo.txt。输入格式要求:性别为男或女,学号为11位且不能重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。此外,如果以读写的方式打开,还要判断记录数numN是否成立,因为结构体数组的大小为N,当num=N时,表示已满,不能再存储数据,需要修改N的值。void add() int num; int i; int age; char sno20; char sex20; char cno20; int right; FILE*fp; if(fp=fopen(StuInfo.txt,r+)=NULL) if(fp=fopen(StuInfo.txt,w)=NULL) printf(n文件不存在且创建失败,返回!n); menu(); printf(n请按照提示输入学生信息:nn); printf(姓名:); scanf(%s,&StuInfo0.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(StuInfo0.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(StuInfo0.Sno,sno); do printf(n年龄:); scanf(%d,&age); if(age100) printf(年龄应在0-100之间,请重新输入年龄!n);right=1;getchar(); else right=0; while(right=1); StuInfo0.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(StuInfo0.CInfo.Cno,cno); printf(n班名:); scanf(%s,&StuInfo0.CInfo.Cname); fprintf(fp,n%st%st%st%dt%st%s,StuInfo0.Sname,StuInfo0.Sex,StuInfo0.Sno,StuInfo0.Age,StuInfo0.CInfo.Cno,StuInfo0.CInfo.Cname); 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,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; /记录数 if(num=N) printf(n保存记录数超出结构体数组数的大小,请先修改N的值!n); printf(n请按enter键返回主菜单!n); getchar(); getchar(); menu(); printf(n请按照提示输入学生信息:nn); printf(姓名:); scanf(%s,&StuInfonum.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(StuInfonum.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;inum;i+) if(strcmp(sno,StuInfoi.Sno)=0) printf(该学号已经存在,请重新输入!n); right=1; getchar(); while(right=1); strcpy(StuInfonum.Sno,sno); do printf(n年龄:); scanf(%d,&age); if(age100) printf(年龄应在0-100之间,请重新输入年龄!n);right=1;getchar(); else right=0; while(right=1); StuInfonum.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(StuInfonum.CInfo.Cno,cno); printf(n班名:); scanf(%s,&StuInfonum.CInfo.Cname); /把该记录写到文件末尾 fprintf(fp,n%st%st%st%dt%st%s,StuInfonum.Sname,StuInfonum.Sex,StuInfonum.Sno,StuInfonum.Age,StuInfonum.CInfo.Cno,StuInfonum.CInfo.Cname); fclose(fp); printf(n保存成功!n); printf(n请按enter键返回主菜单!n); getchar(); getchar(); menu();4.4 子函数修改先判断文件StuInfo.txt以读(r)的方式能否打开,不能就返回,可以就读入记录;然后输入学号查找记录,没找到就返回,找到就按照提示修改该记录,与输入模块一样,输入的格式要求:性别为男或女,学号为11位且不能与除当前修改的记录的学号外的记录的学号重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。输入完成后,再以写(w)的方式创建文件,不能创建就返回,可以就将结构体数组中的所有记录保存到文件中,这与添加稍有差别,最后返回主菜单。void modify() int num; int i; int right; int age; char sex20; char cno20; char sno20; int found=-1; char StuNO20; 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,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; fclose(fpr); printf(n请输入学号选择要修改的记录:); scanf(%s,StuNO); for(i=0;inum;i+) if(strcmp(StuNO,StuInfoi.Sno)=0) found=i; printf(n你要修改的学生信息为:nn); printf(姓名 性别 学号 年龄 班号 班名n); printf(%st%st%st%dt%st%sn,StuInfoi.Sname,StuInfoi.Sex,StuInfoi.Sno,StuInfoi.Age,StuInfoi.CInfo.Cno,StuInfoi.CInfo.Cname); printf(n请按照提示输入学生的新信息:n); printf(姓名:); scanf(%s,&StuInfofound.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(StuInfofound.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;inum;i+) if(i!=found)&(strcmp(sno,StuInfoi.Sno)=0) printf(该学号已经存在,请重新输入!n); right=1; getchar(); while(right=1); strcpy(StuInfofound.Sno,sno); do printf(n年龄:); scanf(%d,&age); if(age100) printf(年龄应在0-100之间,请重新输入年龄!n);right=1;getchar(); else right=0; while(right=1); StuInfofound.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(StuInfofound.CInfo.Cno,cno); printf(n班名:); scanf(%s,&StuInfofound.CInfo.Cname); if(fpw=fopen(StuInfo.txt,w)=NULL) printf(文件打不开,保存失败!n); menu(); for(i=0;inum;i+) /保存文件 fprintf(fpw,n%st%st%st%dt%st%s,StuInfoi.Sname,StuInfoi.Sex,StuInfoi.Sno,StuInfoi.Age,StuInfoi.CInfo.Cno,StuInfoi.CInfo.Cname); fclose(fpw); printf(n修改成功!n); printf(n请按enter键返回主菜单!n); getchar(); getchar(); menu(); if(found0) printf(n没有找到该学号的记录:n); printf(n请按enter键返回主菜单!n); getchar(); getchar(); menu(); 4.5 子函数浏览 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,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); fclose(fp); num=i; printf(n已添加%d个学生信息nn,num); printf(姓名 性别 学号 年龄 班号 班名n); for(i=0;inum;i+) printf(%st%st%st%dt%s%sn,StuInfoi.Sname,StuInfoi.Sex,StuInfoi.Sno,StuInfoi.Age,StuInfoi.CInfo.Cno,StuInfoi.CInfo.Cname); printf(n请按enter键返回主菜单!n); getchar(); getchar(); menu();4.6 子函数查询void quiry() int chose; int right; do printf(n1-按学号查询t2-按姓名查询t3-某班学生信息t4-返回n); printf(n请输入数字选择:); scanf(%d,&chose); if(chose4) 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(); 4.6.1 根据学号查找某学生的学生证信息:void bySno() int found=-1; int num; int i; char no20; 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,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; fclose(fp); printf(n请输入学生学号:); scanf(%s,no); for(i=0;inum;i+) if(strcmp(no,StuInfoi.Sno)=0) found=i;printf(n该学生的信息为:nn);printf(姓名 性别 学号 年龄 班号 班名n); printf(%st%st%st%dt%st%sn,StuInfofound.Sname,StuInfofound.Sex,StuInfofound.Sno,StuInfofound.Age,StuInfofound.CInfo.Cno,StuInfofound.CInfo.Cname); if(found0) printf(n没有找到该班号的记录!n); printf(n请按enter键返回上级菜单!n); getchar(); getchar(); quiry();4.6.2 根据姓名查找某学生的学生证信息:void bySname() int found=-1; int num; int i; char name20; 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,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; fclose(fp); printf(n请输入学生姓名:); scanf(%s,name); for(i=0;inum;i+) if(strcmp(name,StuInfoi.Sname)=0) found=i; printf(n该学生的信息为:nn);printf(姓名 性别 学号 年龄 班号 班名n); printf(%st%st%st%dt%st%sn,StuInfofound.Sname,StuInfofound.Sex,StuInfofound.Sno,StuInfofound.Age,StuInfofound.CInfo.Cno,StuInfofound.CInfo.Cname); if(found0) printf(n没有找到该班号的记录!n); printf(n请按enter键返回上级菜单!n); getchar(); getchar(); quiry(); 4.6.3 根据班号查询某个班级所有学生的学生证信息:void byCno() int found=-1; int num; int i; char ClaNO20; 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,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); num=i; fclose(fp); printf(n请输入班号:); scanf(%s,ClaNO); printf(n该班级的学生信息为:nn); printf(姓名 性别 学号 年龄 班号 班名n); for(i=0;inum;i+) if(strcmp(ClaNO,StuInfoi.CInfo.Cno)=0) found=i; printf(%st%st%st%dt%st%sn,StuInfofound.Sname,StuInfofound.Sex,StuInfofound.Sno,StuInfofound.Age,StuInfofound.CInfo.Cno,StuInfofound.CInfo.Cname); if(found0) /found小于0,说明不存在班号的学生记录 printf(n没有找到该班号的记录!n); printf(n请按enter键返回上级菜单!n); getchar(); getchar(); quiry();4.7 子函数统计该模块实现了基本的统计功能,包括分别统计男女生的人数、平均年龄,以及全体学生的人数和基本年龄;void stastic() int chose; int right; do printf(n1-全体男生t2-全体女生t3-全体学生t4-返回n); printf(n请输入数字选择:); scanf(%d,&chose); if(chose4) 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(); 4.7.1 统计男生信息子模块void Male() int num; /人数 float mg; /平均年龄 num=MaleNum(); mg=MaleMG(); printf(n男生总人数为:%dn平均年龄为:%fn,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,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); fclose(fp); num=i; for(i=0;inum;i+) if(strcmp(男,StuInfoi.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,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); fclose(fp); num=i; for(i=0;i0) mAge/=count; return mAge;4.7.2 统计女生信息子模块void Female() int num; float mg; num=FemaleNum(); mg=FemaleMG(); printf(n女生总人数为:%dn平均年龄为:%fn,num,mg); 返回女生人数子函数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,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); fclose(fp); num=i; for(i=0;inum;i+) if(strcmp(女,StuInfoi.Sex)=0) count+; return count;返回女生平均年龄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,&StuInfoi.Sname,&StuInfoi.Sex,&StuInfoi.Sno,&StuInfoi.Age,&StuInfoi.CInfo.Cno,&StuInfoi.CInfo.Cname); fclose(fp); num=i; for(i=0;i0) mAge/=count; return mAge;4.7.3 全体学生统计信息子模块void StuMsg()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论