还剩23页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
C语言程序设计报告书学生证管理程序学号09021106姓名SYF2010年5月
一、题目内容的提出与描述大学学生人数众多,学生信息量巨大手工管理十分艰难,且极易出错和丢失信息,并会占用大量的纸张和空间资源本款软件就是基于对学生证管理的需求,为学校管理方量身定做,操作容易,快速便捷,并且节约能源它不仅符合当今信息化社会的需求,还顺应了当代低碳环保的理念此软件可实现学生信息的录入、输出、查询、修改、统计和删除的功能,查询和统计的功能是本款软件的特色,比较方便另外,因为本人笔记本为windows7系统,调试时无法在中文条件下运行,所以本款软件有中英文两个版本(英文版为student-english)
二、软件的需求分析描述
1.软件应具有的功能
1.输入学生信息
2.输出全部学生信息
3.查询学生信息输入单个学号以查询一个学生;输入专业以查询一专业学生;输入学院以查询一院学生
4.修改学生信息输入学生学号以修改信息
5.统计学生信息按性别统计男、女生人数及比例;按户籍统计本地生和外地生人数及比例;
6.删除学生信息输入学生学号以删除信息补充教师有特定验证码(验证码为1),输入正确则可实行以上操作2.题目要求1按照分析、设计、编码、调试和测试的软件开发过程完成这个应用程序;2学生信息应该包含学号、姓名、年龄、专业、所属学院、户籍所在地3为各项操作功能设计一个菜单应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目
三、开发工具的介绍本软件采用色开发工具为C语言C语言CombinedLanguage(组合语言)的中英混合简称是一种计算机程序设计语言它既具有高级语言的特点,又具有汇编语言的特点它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序因此,它的应用范围广泛,且具有强大的功能许多著名的系统软件,如DBASEⅣ都是由C语言编写的用C语言加上一些汇编语言子程序,就更能显示C语言的优势了,像PC-DOS、WORDSTAR等就是用这种方法编写的归纳起来C语言具有下列特点
1.C是中级语言它把高级语言的基本结构和语句与低级语言的实用性结合起来,可以像汇编语言一样对位、字节和地址进行操作
2.C是结构式语言结构式语言的显著特点是代码及数据的分隔化,使程序层次清晰,便于使用、维护以及调试C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化
3.C语言功能齐全具有各种各样的数据类型,并引入了指针概念,可使程序效率更高另外C语言也具有强大的图形功能,支持多种显示器和驱动器而且计算功能、逻辑判断功能也比较强大
4.C语言适用范围大适合于多种操作系统,多种机型C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的C语言具有绘图能力强,可移植性,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言
5.C语言文件由数据序列组成,可以构成二进制文件或文本文件
四、软件的总体设计和详细设计【总体设计】
1、软件的总体设计部分的结构图
2.各模块函数作用简介因为所用信息为全局变量,所以各函数间无传值或传址函数名主要作用调用及数据传输关系main--主函数检验验证码是否正确(验证码为1);若正确则显示主菜单,进入下面操作;若错误可选择重新输入或退出调用了menu;一部分调用了tuichu.tuichu--退出函数显示“感谢使用”“孙亚飞制作”等结束语,并可实现退出操作;避免了重复语句被mainmenu调用;menu—主菜单函数显示主菜单;用户可输入选项后可转向对应模块进行下面操作分别调用了tuichuinputprintallsearchtongjimodifydel;也被main及以上函数调用;input--输入函数输入要添加的学生人数,之后可输入对应人数的学生的信息;操作完可返回主菜单被menu调用,也调用menu;printall--输出全部函数可输出全部学生的信息;操作完可返主回菜单被menu调用,也调用menu;search--查询函数通过一个菜单可选择输入单个学号以查询一个学生的信息,输入专业名查询一班学生的信息,输入学院名查询一院学生的信息操作完可返回主菜单被menu调用,也调用menu;tongji--统计函数通过一个菜单可选择按性别统计男、女生人数及比例或按户籍统计本地生和外地生人数及比例;操作完可返回主菜单被menu调用也调用menu;modify--修改函数通过输入一个学生学号以修改其信息;操作完可返回主菜单被menu调用也调用menu;del--删除函数通过输入一个学生学号以删除其信息;操作完可返回主菜单被menu调用也调用menu;结构体为全局变量structstudent{longnumber;charname
[5];charsex;intage;charcollege
[15];charmajor
[10];charhukou
[10];}stu[N];定义全局变量指针FILE*fp;【详细设计】
1.各模块函数框图
1.main--主函数2tuichu--退出函数
3.menu—主菜单函数
4.input--输入函数
5.printall--输出全部函数
6.search--查询函数后面的流程图转下页
7.tongji--统计函数
8.modify--修改函数9.del--删除函数
五、资源描述计算机需装有winTc软件计算机的配置:windowsXpvista/7系统只能运行英文版windowsXp中、英文两个版本均可运行
六、源代码#defineN20#includestdio.hstructstudent{longnumber;charname
[20];charsex;intage;charcollege
[20];charmajor
[20];charhukou
[20];}stu[N];FILE*fp;/*全局变量*//*---------------------------------主函数--------------------------------*/main{structstudentstu[N];intab;printf请输入验证码\n;/*验证码为1*/scanf%da;whilea!=1{printf验证码错误!\n;printf1重新输入\n2退出\n;printf您的选择是(输入代号);scanf%db;ifb==1{printf请输入验证码\n;scanf%da;}elsetuichu;}menu;}/*---------------------------------退出函数--------------------------------*/tuichu{printf\n\n感谢使用本系统!;printf\n孙亚飞制作于2010年;getch;exit0;}/*----------------------------------主菜单-----------------------------------*/menu{intc;printf\n*******************\n;printf欢迎使用本系统!\n\n;printf1:输入学生信息\n;printf2:输出全部学生信息\n;printf3:查询学生信息\n;printf4:统计学生信息\n;printf5:修改学生信息\n;printf6:删除学生信息\n;printf7:退出系统\n;printf*******************\n\n;printf您的选择是(输入代号):;scanf%dc;switchc{case1:inputstu;break;case2:printallstu;break;case3:searchstu;break;case4:tongjistu;break;case5:modifystu;break;case6:delstu;break;case7:tuichu;break;}}/*----------------------------------输入部分---------------------------------*/inputstructstudentstu[]{intin;fp=fopenstu_lista+;printf\n\n请输入要添加的学生的人数\n;scanf%dn;fori=1;in+1;i++{printf\n第%d个学生i;printf\n请输入学生学号(取后7位);scanf%ldstu[i].number;printf\n请输入学生姓名;scanf%sstu[i].name;printf\n请输入学生性别(填“m”或“f”);scanf%sstu[i].sex;printf\n请输入学生年龄;scanf%dstu[i].age;printf\n请输入学生学院名称;scanf%sstu[i].college;printf\n请输入学生专业;scanf%sstu[i].major;printf\n请输入学生户口所在地北京写作“beijing”;scanf%sstu[i].hukou;}iffp=fopenstu_lista+==NULLprintf无法打开文件\n;fori=1;stu[i].number!=0;i++iffwritestu[i]sizeofstructstudent1fp!=1printf写入错误\n;fclosefp;menu;}/*---------------------------------输出部分---------------------------------*/printallstructstudentstu[]{intimax=0;fp=fopenstu_listr;fori=1;iN+1;i++{freadstu[i]sizeofstructstudent1fp;iffeoffp{fclosefp;break;}max++;}fp=fopenstu_listr;ifmax==0printf\n没有信息!\n;else{printf学号\t姓名\t性别\t年龄\t学院\t专业\t户口\n;fori=1;imax+1;i++{printf%ld\t%s\t%c\t%d\t%s\t%s\t%s\n\nstu[i].numberstu[i].namestu[i].sexstu[i].agestu[i].collegestu[i].majorstu[i].hukou;}}fclosefp;getch;menu;}/*---------------------------------查找部分---------------------------------*/searchstructstudentstu[]{intcimax=0d=0e=0f=0;longg;charm
[20]n
[20];fp=fopenstu_listr;printf\n1查询单个学生信息;printf\n2查询一个专业学生;printf\n3查询一学院学生;printf\n您的选择是(输入代号);scanf%dc;fori=1;iN+1;i++{freadstu[i]sizeofstructstudent1fp;iffeoffp{fclosefp;break;}max++;}fp=fopenstu_listr;ifc==1{printf\n\n请输入要查找的学生的学号;scanf%ldg;printf学号\t姓名\t性别\t年龄\t学院\t专业\t户口\n;fori=1;imax+1;i++{freadstu[i]sizeofstructstudent1fp;ifstu[i].number==g{printf%ld\t%s\t%c\t%d\t%s\t%s\t%s\n\nstu[i].numberstu[i].namestu[i].sexstu[i].agestu[i].collegestu[i].majorstu[i].hukou;d++;}}ifd==0printf\n没有相关信息!\n;}elseifc==2{printf\n\n请输入要查找的专业的名称;scanf%sm;printf学号\t姓名\t性别\t年龄\t学院\t专业\t户口\n;fori=1;imax+1;i++{freadstu[i]sizeofstructstudent1fp;ifstrcmpstu[i].majorm==0{printf%ld\t%s\t%c\t%d\t%s\t%s\t%s\n\nstu[i].numberstu[i].namestu[i].sexstu[i].agestu[i].collegestu[i].majorstu[i].hukou;e++;}}ife==0printf\n没有相关信息!\n;}else{printf\n\n请输入要查找的专业的名称;scanf%sg;printf学号\t姓名\t性别\t年龄\t学院\t专业\t户口\n;fori=1;imax+1;i++{freadstu[i]sizeofstructstudent1fp;ifstrcmpstu[i].collegen==0{printf%ld\t%s\t%c\t%d\t%s\t%s\t%s\n\nstu[i].numberstu[i].namestu[i].sexstu[i].agestu[i].collegestu[i].majorstu[i].hukou;f++;}}iff==0printf\n没有相关信息!\n;}fclosefp;getch;menu;}/*--------------------------------统计部分-------------------------------*/tongjistructstudentstu[]{intcisum1sum2sum3sum4max;floatdefg;sum1=0;sum2=0;sum3=0;sum4=0;max=0;fp=fopenstu_listr;printf\n1统计男女生人数及比例;printf\n2统计本地生与外地生的人数及比例;printf\n您的选择是(输入代号);scanf%dc;fori=1;iN+1;i++{freadstu[i]sizeofstructstudent1fp;iffeoffp{fclosefp;break;}max++;}ifc==1{fori=1;imax+1;i++{ifstu[i].sex==msum1++;elsesum2++;}ifsum1==0sum2==0printf没有相关信息无法统计!;else{printf\n男女生人数分别是%d%dsum1sum2;d=floatsum1/sum1+sum2*100;e=floatsum2/sum1+sum2*100;printf\n男生人数比例为%.2f%d;printf\n女生人数比例为%.2f%e;}}else{fori=1;imax+1;i++{ifstrcmpstu[i].hukoubeijing==0sum3++;elsesum4++;}ifsum3==0sum4==0printf没有相关信息无法统计!;else{printf\n\n本地生与外地生人数分别是%d%dsum3sum4;f=floatsum3/sum3+sum4*100;g=floatsum4/sum3+sum4*100;printf\n本地生比例为%.2f%f;printf\n外地生比例为%.2f%g;}}fclosefp;getch;menu;}/*---------------------------------修改部分---------------------------------*/modifystructstudentstu[]{intid=0max=0;longc;structstudentst
[1];fp=fopenstu_listr;printf请输入要修改的学生的学号;scanf%ldc;fori=1;iN+1;i++{freadstu[i]sizeofstructstudent1fp;iffeoffp{fclosefp;break;}max++;ifstu[i].number==cd++;}ifd==0printf\n没有相关信息无法修改!\n;else{printf\n请输入学生学号(取后7位);scanf%ldst
[0].number;printf\n请输入学生姓名;scanf%sst
[0].name;printf\n请输入学生性别(填“m”或“f”);scanf%sst
[0].sex;printf\n请输入学生年龄;scanf%dst
[0].age;printf\n请输入学生学院名称;scanf%sst
[0].college;printf\n请输入学生专业;scanf%sst
[0].major;printf\n请输入学生户口所在地北京写作“beijing”;scanf%sst
[0].hukou;}fp=fopenstu_listr;fori=1;imax+1;i++{ifstu[i].number==c{stu[i].number=st
[0].number;stu[i].sex=st
[0].sex;stu[i].age=st
[0].age;strcpystu[i].namest
[0].name;strcpystu[i].collegest
[0].college;strcpystu[i].majorst
[0].major;strcpystu[i].hukoust
[0].hukou;}}fclosefp;fp=fopenstu_listw;fori=1;imax+1;i++fwritestu[i]sizeofstructstudent1fp;fclosefp;getch;menu;}/*--------------------------------删除部分-------------------------------*/delstructstudentstu[]{inttimax=0;longc;fp=fopenstu_listr;printf请输入要修改的学生的学号;scanf%ldc;fori=1;iN+1;i++{freadstu[i]sizeofstructstudent1fp;ifstu[i].number==ct=i;iffeoffp{fclosefp;break;}max++;}Ifmax==0printf\n没有相关信息无法删除\n;else{fp=fopenstu_listw;fori=1;imax+1;i++{ifi!=tfwritestu[i]sizeofstructstudent1fp;elsecontinue;}}fclosefp;getch;menu;}
七、调试程序[检查验证码][显示菜单][退出函数][输入函数][输出全部函数][查找函数][统计函数][修改函数](修改后)[删除函数]
八、在编程过程中遇到的问题与解决办法因为是一个人编程,所以在编程过程中出现了许许多多、形形色色的错误通过发现及改正这些错误,我对c语言又有了更深刻的理解,最重要的是,我对知识的掌握与灵活运用方面有了极大的提高!下面我就举一些典型的错误例子和解决方法
1.自己改正的
(1)在未定义前使用——应把定义放于函数最前
(2)while语句执行结果不对——反复修改加看书
(3)退出函数最好不要叫exit,不然运行结果可能出错——exit为库函数
(5)查找一个专业及一个学院信息处出现语法错误——字符串比较要用“”还有一些更低级的错误在此就不多说了这些错误大多因为我对知识的掌握不够深刻,运用不够熟练
2.在老师指点下改正的
(1)警告不可移动的指针在函数中——此函数中将number用作了数组,而long型数据不能用数组表示类似的,还有char型在判断时要用“==”,而不是strcmp语句
(2)信息无法存入stu_list中——i值表的有问题,输入循环处是i=1,后面判断是否可打开文件处是i=0
(3)因为预编译N为10,尽管后面输入的学生不足10,也会全部输出,多出来的显示0——老师告诉我可以用iffeoffp{fclosefp;break;}的语句改正这个错误还有一些有关文件部分的错误在此就不全部详述了由于这部分只是有一定难度,上学期也没有接触过,所以掌握起来比较吃力但是王微老师非常耐心细致地帮我一一解决这方面的问题非常感谢老师!!!O^__^O总之,这次的课设我受益匪浅虽然没有体验到团队合作的感觉,但一个人编程我学会了很多东西,我知道了要想学好C一定要多动手编,多实践输入查询统计修改删除按学号按专业按学院按性别按户籍进入主菜单学生证管理系统输入验证码正确错误菜单重试退出输出全部while判断验证码输入验证码开始重新输入/退出TF重新输入退出tuichu函数进入主菜单menu开始退出输出结束语switchprintf显示菜单开始结束input函数printall函数modify函数search函数tuichu函数del函数tongji函数case1case2case3case4case5case6case7TFTF开始输入要添加的学生人数n创建一个文件in+1i=1i++输入学生信息Tstu[i].number!=0i++i=1T回到主菜单menu判断fp是否为空显示无法打开文件fwrite!=1显示写入错误FTF开始in+1i=1i++输出学生信息T打开文件读文件max++feoffpmax==0回到主菜单menu没有信息TT开始If选项显示本模块菜单FiN+1i=1i++读文件TfeoffpMax++输入选项TF输入要查找的学生的学号cTFimax+1i=1i++输出该学生信息d++d==0TStu[i]学号为c输入要查找的专业的名称m......与第一种情况流程图相同将Stu[i]学号为c改为Stu[i]专业为m将c改为ne改为f显示没有该学生信息......与第一种情况流程图相同将Stu[i]学号为c改为Stu[i]专业为n将c改为ne改为f输入要查找的学院的名称n回到主菜单menu123FTT前面部分流程图与search()函数第一页流程图相同If选项12开始Fimax+1i=1i++stu[i性别为男Sum2++Sum1++输出统计信息Sum1为0且sum2为0T显示无法统计FTTFimax+1i=1i++stu[i性别为男Sum2++Sum1++输出统计信息Sum1为0且sum2为0T显示无法统计回到主菜单menuTTT输入修改后的信息输入要修改的学生学号i++写入文件回到主菜单menuT开始FiN+1i=1i++读文件feoffpMax++Timax+1i=1stu[i]学号为c将修改后的信息付给stu[i]d==0d++stu[i]学号为cF显示无该学生信息,无法修改转右侧转右侧TTT输入修改后的信息输入要修改的学生学号i++写入文件回到主菜单menuT开始FiN+1i=1i++读文件feoffpMax++Timax+1i=1stu[i]学号为c将修改后的信息付给stu[i]d==0t=istu[i]学号为cF显示无该学生信息,无法删除。