收藏 分享(赏)

学生证管理系统(C语言课程设计).doc

上传人:hskm5268 文档编号:7614807 上传时间:2019-05-22 格式:DOC 页数:51 大小:927KB
下载 相关 举报
学生证管理系统(C语言课程设计).doc_第1页
第1页 / 共51页
学生证管理系统(C语言课程设计).doc_第2页
第2页 / 共51页
学生证管理系统(C语言课程设计).doc_第3页
第3页 / 共51页
学生证管理系统(C语言课程设计).doc_第4页
第4页 / 共51页
学生证管理系统(C语言课程设计).doc_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、C 语言课程设计报告学 院 : 地 球 科 学 学 院 专 业 : 资 源 环 境 与 城 乡 规 划 管 理题 目 : 学 生 证 管 理 系 统 班 号 : 014072-XX 姓 名 : 李 仙 伟 学 号 : XXXXXXXX 指 导 教 师 : XXXXXXXX 2010 年 11 月 26 日- 2 -报告目录一、课程设计目的 3二、实习内容及要求 3 三、需求分析 3四、总体分析 3五、详细设计 45.0 头文件及结构体 45.1 主函数55.2 菜单模块55.3 添加模块65.4 修改模块10 5.5 浏览模块 14 5.6 查询模块 155.6.1 按学号查询 155.6.2

2、 按名字查询 165.6.3 按班级查询 175.7 统计模块 185.7.1 男生信息195.7.2 女生信息215.7.3 全体学生信息 23 5.8 删除模块 23六、上机操作 26 6.1 系统说明 266.2 系统测试 26 七、总结 32八、源代码 32- 3 -一、课程设计目的通过实践,学会编制结构清晰、风格良好、数据结构适当的 C 语言程序,加深对 C 语言基础知识的理解和掌握,进一步巩固 C 语言编程实践能力,锻炼思维逻辑和解决综合性实际问题的能力。二、实习内容及要求1、用 C 语言编写一个学生证管理系统,该系统具有以下功能:(1)录入某位学生的学生证信息;(2)给定学号,显

3、示某位学生的学生证信息;(3)给定某个班级的班号,显示该班所有学生的学生证信息;(4)给定某位学生的学号,修改该学生的学生证信息;(5)给定某位学生的学号,删除该学生的学生证信息;(6)提供一些统计各类信息的功能;(7)提供浏览所有学生的学生证信息的功能。2、输入要求应用程序运行后,在屏幕上显示一个菜单;用户可以根据要求,选定相应的操作项目;进入某个操作后,根据应用程序的提示,从键盘输入相应的信息。3、输出要求(1)应用程序运行后,要在屏幕上显示一个菜单;(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。三、需求分析根据题目要求,学生信息要从文本文件中存

4、取,所以本程序应该提供读写文件,显示、统计、查询、修改记录,保存文件等操作,此外,还应该提供键盘式选择菜单实现功能。四、总体设计根据需求分析,可以把这个系统的设计分为添加、修改、查询、浏览、统计、删除六大- 4 -模块,其中查询模块可以分为三个子模块,统计模块可以分为三个子模块,子模块下面还有子函数;系统功能模块图如下所示:五、详细设计5.0 头文件及结构体#include#include#include#define N 100struct Class /班级char Cname20; /班名char Cno20; /班号;struct Student /学生char Sname20; /姓

5、名char Sex10; /性别char Sno20; /学号int Age; /年龄struct Class CInfo; /嵌套结构体,表示班级信息StuInfoN; /结构体数组,用作读取和存放临时数据5.1 主函数void main()menu(); /菜单getchar();- 5 -5.2 菜单void menu() int chose;int right;doprintf(“ntttt 学生证管理系统 n“);printf(“);printf(“ 菜单:t1-添加t2-修改t3- 浏览全部t4-查询t5-统计t6-删除t7-退出n“);printf(“);printf(“请输入数

6、字选择:“);scanf(“%d“,if(chose8)right=1;printf(“输入错误,请重新输入!n“);getchar();else right=0;- 6 -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)

7、; /退出 5.3 添加模块首先要判断文件StuInfo.txt 是否存在,如果存在就以读写(r+)的方式打开,如果不存在,就以写(w)的方式创建文件 StuInfo.txt。输入格式要求:性别为男或女,学号为 11 位且不能重复,年龄在 0-100 之间,班级号为 6 位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。此外,如果以读写的方式打开,还要判断记录数 num100) printf(“年龄应在 0-100 之间,请重新输入年龄!n“);right=1;getchar();else right=0;while(right=1);StuInfo0.Age=age;dop

8、rintf(“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“, fprintf(fp,“n%st%st%st%dt%st%s“,StuInfo0.Sname,StuInfo0.Sex,StuInfo0.Sno,StuInfo0.Age,StuInfo0.CInfo.Cno,StuInf

9、o0.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“,- 9 -num=i; /记录数if(num=N)printf(“n 保存记录数超出结构体数组数的大小,请先修改 N 的值!n“);printf(“n 请按 enter 键返回主菜单!n“);getchar();getchar();menu(

10、);printf(“n 请按照提示输入学生信息:nn“);printf(“姓名:“);scanf(“%s“,doprintf(“n 性别(男或女):“);scanf(“%s“,sex);if(strcmp(sex,“男“)!=0)right=1;getchar();else right=0;while(right=1);strcpy(StuInfonum.Sex,sex);doprintf(“n 学号(11 位):“);scanf(“%s“,sno);if(strlen(sno)!=11) printf(“输入错误,学号长度应为 11 位数!n“);right=1;getchar();else

11、 right=0;for(i=0;i100) printf(“年龄应在 0-100 之间,请重新输入年龄!n“);right=1;getchar();else right=0;while(right=1);StuInfonum.Age=age;doprintf(“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 班名

12、:“);scanf(“%s“,/把该记录写到文件末尾 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();- 11 -5.4 修改模块void modify()int num;int i;int ri

13、ght;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“,num=i;fclose(fpr);printf(“n 请输入学号选择要修改的记录:“);先判断文件 StuInfo.txt 以读(r)的方式能否打开,不能就返回,可以就读入记录;然后输入学号查找记录,没

14、找到就返回,找到就按照提示修改该记录,与输入模块一样,输入的格式要求:性别为男或女,学号为 11 位且不能与除当前修改的记录的学号外的记录的学号重复,年龄在0-100 之间,班级号为 6 位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。输入完成后,再以写(w)的方式创建文件,不能创建就返回,可以就将结构体数组中的所有记录保存到文件中,这与添加稍有差别,最后返回主菜单。开始( f p r = f o p e n ( “ S t u I n f o . t x t “ , “ r “ ) ) = = N U L L读取文件输入学号根据提示输入新信息( f p w = f o p

15、 e n ( “ S t u I n f o . t x t “ , “ w “ ) ) = = N U L L保存数据主菜单是否存在该学号的记录否是否是否是- 12 -scanf(“%s“,StuNO);for(i=0;i100) printf(“年龄应在 0-100 之间,请重新输入年龄!n“);right=1;getchar();else right=0;while(right=1);StuInfofound.Age=age;doprintf(“n 班号(6 位):“);scanf(“%s“,cno);if(strlen(cno)!=6) printf(“输入错误,班号长度应为 6 位数

16、!n“);right=1;getchar();else right=0;while(right=1);strcpy(StuInfofound.CInfo.Cno,cno);printf(“n 班名:“);scanf(“%s“,if(fpw=fopen(“StuInfo.txt“,“w“)=NULL)printf(“文件打不开,保存失败!n“);menu();for(i=0;i4)right=1;getchar();else right=0;while(right=1);switch(chose)case 1:bySno();break;case 2:bySname();break;case 3

17、:byCno();break;case 4:menu(); 5.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();- 16 -for(i=0;!feof(fp);i+) fscanf(fp,“%s%s%s%d%s%s“,num=i;fclose(fp);printf(“n 请输入学生学号:“);scanf(“%s“,no);for(i=0;i4)- 19 -right=

18、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“);getch

19、ar();getchar();stastic();break;case 4:menu(); 5.7.1 统计男生信息子模块void Male()int num; /人数float mg; /平均年龄num=MaleNum();mg=MaleMG();printf(“n 男生总人数为:%dn 平均年龄为:%fn“,num,mg);5.7.1.1 返回男生人数子函数int MaleNum() - 20 -int num;int count=0;int i;FILE*fp;if(fp=fopen(“StuInfo.txt“,“r“)=NULL)printf(“文件打不开!n“);menu();for

20、(i=0;!feof(fp);i+) fscanf(fp,“%s%s%s%d%s%s“,fclose(fp);num=i;for(i=0;i0)mAge/=count; return mAge;5.7.2 统计女生信息子模块void Female() int num;float mg;num=FemaleNum();mg=FemaleMG();printf(“n 女生总人数为:%dn 平均年龄为:%fn“,num,mg);5.7.2.1 返回女生人数子函数int FemaleNum() int num;int count=0;int i;FILE*fp;if(fp=fopen(“StuInfo

21、.txt“,“r“)=NULL)printf(“文件打不开!n“);menu();for(i=0;!feof(fp);i+) - 22 -fscanf(fp,“%s%s%s%d%s%s“,fclose(fp);num=i;for(i=0;i0)mAge/=count; return mAge;5.7.3 全体学生统计信息子模块void StuMsg() int num;float mg;num=StuNum();mg=MG();printf(“n 学生总人数为:%dn 学生平均年龄为:%fn“,num,mg);Male();Female();5.7.3.1 返回全体学生的人数子函数int St

22、uNum() 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;- 24 -int found=-1;char StuNO20;FILE*fpr,*fpw;if(fpr=fopen(“StuInfo.txt“,“r“)=NULL)pr

23、intf(“文件打不开!n“);menu();for(i=0;!feof(fpr);i+) fscanf(fpr,“%s%s%s%d%s%s“,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“,StuInfofound.Sname,StuInf

24、ofound.Sex,StuInfofound.Sno,StuInfofound.Age,StuInfofound.CInfo.Cno,StuInfofound.CInfo.Cname);if(foundnum-1)for(found;foundnum-1;found+)strcpy(StuInfofound.Sname,StuInfofound+1.Sname);strcpy(StuInfofound.Sex,StuInfofound+1.Sex);strcpy(StuInfofound.Sno,StuInfofound+1.Sno);StuInfofound.Age=StuInfofoun

25、d+1.Age;strcpy(StuInfofound.CInfo.Cno,StuInfofound+1.CInfo.Cno);strcpy(StuInfofound.CInfo.Cname,StuInfofound+1.CInfo.Cname); if(fpw=fopen(“StuInfo.txt“,“w“)=NULL)printf(“文件打不开!n“);- 25 -menu();for(i=0;inum-1;i+) /保存文件fprintf(fpw,“n%st%st%st%dt%st%s“,StuInfoi.Sname,StuInfoi.Sex,StuInfoi.Sno,StuInfoi.

26、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();- 26 -六、上机操作6.1 系统说明本系统存储信息的文本文件名为 StuInfo.txt;该文件在程序主目录下,添加模块先采用读写的方式(r+)打开文件,如果不存在就以写的方式(w+)创建该文件,因此,假如该文件已存在,则也可以直接打开该文件进行浏览、编辑; 6.2 系统测试6.2.1 浏览数据- 27 -6.2.2 添加数据添加该生信息后浏览结果:- 28 -6.2.3 修改数据修改后的结果- 29 -6.2.4 查询记录按学号查询:按姓名查询:按班级查询:- 30 -6.2.5 统计数据男生统计信息:女生统计信息:全体学生统计信息:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报