[计算机软件及应用]C语言学生证管理系统.doc_第1页
[计算机软件及应用]C语言学生证管理系统.doc_第2页
[计算机软件及应用]C语言学生证管理系统.doc_第3页
[计算机软件及应用]C语言学生证管理系统.doc_第4页
[计算机软件及应用]C语言学生证管理系统.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

C语言课程设计报告学 院: 资源学院 专 业: 资源勘察工程题 目: 学 生 证 管 理 系 统 班 号: 021091 姓 名: 次仁宗吉 学 号: 20091004519 指导教师: 童恒建 2011年01月3-8日报告目录一、课程设计目的 3二、实习内容及要求 3 三、需求分析 3四、总体分析 3五、详细设计 45.0 头文件及结构体 45.1 主函数45.2 菜单模块55.3 公共函数65.4 添加模块105.5 修改模块10 5.6 浏览模块 11 5.7 查询模块 11 5.7.1 按学号查询 12 5.7.2 按名字查询 13 5.7.3 按班级查询 145.8 统计模块 14 5.8.1 男生信息15 5.8.2 女生信息17 5.8.3 全体学生信息 18 5.9 删除模块 19六、上机操作 20七、总结 25八、源代码 25一、课程设计目的通过实践,学会编制结构清晰、风格良好、数据结构适当的C语言程序,加深对C语言基础知识的理解和掌握,进一步巩固C语言编程实践能力,锻炼思维逻辑和解决综合性实际问题的能力。二、实习内容及要求1、用C语言编写一个学生证管理系统,该系统具有以下功能: (1)录入某位学生的学生证信息;(2)给定学号,显示某位学生的学生证信息;(3)给定某个班级的班号,显示该班所有学生的学生证信息;(4)给定某位学生的学号,修改该学生的学生证信息;(5)给定某位学生的学号,删除该学生的学生证信息;(6)提供一些统计各类信息的功能;(7)提供浏览所有学生的学生证信息的功能。2、输入要求应用程序运行后,在屏幕上显示一个菜单;用户可以根据要求,选定相应的操作项目;进入某个操作后,根据应用程序的提示,从键盘输入相应的信息。3、输出要求(1)应用程序运行后,要在屏幕上显示一个菜单;(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。三、需求分析根据题目要求,学生信息要从文本文件中存取,所以本程序应该提供读写文件,显示、统计、查询、修改记录,保存文件等操作,此外,还应该提供键盘式选择菜单实现功能。四、总体设计根据需求分析,可以把这个系统的设计分为添加、修改、查询、浏览、统计、删除六大模块,其中查询模块可以分为三个子模块,统计模块可以分为三个子模块,子模块下面还有子函数;系统功能模块图如下所示:五、详细设计5.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; /结构体数组,用作读取和存放临时数据5.1 主函数void main() menu(); /菜单 getchar();5.2 菜单模块void menu() int chose; int right; do system(cls); printf(ntttt学生证管理系统n); printf(); printf( 菜单:t1-添加t2-修改t3-浏览全部t4-查询t5-统计t6-删除t7-退出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); /退出 5.3公共函数5.3.1返回主菜单函数void BackMenu() printf(n请按enter键返回主菜单!n); getchar(); getchar(); menu();5.3.2加载文件函数以读(r)的方式打开StuInfo.txt文件,若不能打开,表示文件不存在,返回0;若文件存在,就读入所有记录到结构体数组中,并返回记录数;int LoadFile() int i; FILE*fp; if(fp=fopen(StuInfo.txt,r)=NULL) return 0; /返回0,表示文件不存在 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); return i; /返回记录条数5.3.3输入第num+1条记录首先要判断记录数num=N是否成立,因为结构体数组的大小为N,当num=N时,表示已满,不能再存储数据,需要修改N的值。若numN,则按提示输入一条记录,输入格式要求:性别为男或女,学号为11位且不能重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。void Input(int num) int i; int age; char sno20; char sex20; char cno20; int right; if(num=N) printf(n保存记录数超出结构体数组数的大小,请先修改N的值n); BackMenu(); 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);5.3.4 保存文件 以写的方式新建文件StuInfo.txt,然后将结构体数组中的记录写入文件中。void SaveFile(int num) /保存num+1条记录 FILE*fpw; int i; if(fpw=fopen(StuInfo.txt,w)=NULL) printf(文件打不开,保存失败!n); BackMenu(); for(i=0;i=num;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); 5.4 添加模块void add() int num; system(cls); num=LoadFile(); Input(num); SaveFile(num); BackMenu();5.5 修改模块与输入模块一样,输入的格式要求:性别为男或女,学号为11位且不能与除当前修改的记录的学号外的记录的学号重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止,输入完成后,保存文件。 void modify() int num; int i; int right; int found=-1; char StuNO20; num=LoadFile(); system(cls); if(num=0) printf(文件为空!);BackMenu(); 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); if(found0) printf(n没有找到该学号的记录!n); BackMenu(); Input(found); SaveFile(num-1); BackMenu(); 5.6 浏览模块 void browse()/显示所有学生信息 int num; int i; num=LoadFile(); system(cls); if(num=0) printf(文件为空!); BackMenu(); printf(n已添加%d个学生信息nn,num); printf(姓名 性别 学号 年龄 班号 班名n); for(i=0;inum;i+) printf(%st%st%st%dt%st%sn,StuInfoi.Sname,StuInfoi.Sex,StuInfoi.Sno,StuInfoi.Age,StuInfoi.CInfo.Cno,StuInfoi.CInfo.Cname); BackMenu();5.7 查询模块void quiry() int chose; int right; do system(cls); printf(nt1-按学号查询t2-按姓名查询t3-某班学生信息t4-返回n); printf(n请输入数字选择:); scanf(%d,&chose); if(chose4) right=1; getchar(); else right=0;while(right=1);switch(chose) case 1:system(cls);bySno();break;case 2:system(cls);bySname();break;case 3:system(cls);byCno();break;case 4:menu(); 5.6.0返回查询子菜单void BackQuiry() printf(n请按enter键返回上级菜单!n); getchar(); getchar(); quiry();5.6.1 根据学号查找某学生的学生证信息:void bySno() int found=-1; int num; int i; char no20; num=LoadFile(); if(num=0) printf(文件为空!);BackQuiry(); 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%s%sn,StuInfofound.Sname,StuInfofound.Sex,StuInfofound.Sno,StuInfofound.Age,StuInfofound.CInfo.Cno,StuInfofound.CInfo.Cname); if(found0) printf(n没有找到该班号的记录!n); BackQuiry();5.6.2 根据姓名查找某学生的学生证信息:void bySname() int found=-1; int num; int i; char name20; num=LoadFile(); if(num=0) printf(文件为空!);BackQuiry(); printf(n请输入学生姓名:); scanf(%s,name); printf(n叫该姓名的学生信息为:nn); printf(姓名 性别 学号 年龄 班号 班名n); for(i=0;inum;i+) if(strcmp(name,StuInfoi.Sname)=0) found=i;printf(%st%st%st%dt%s%sn,StuInfofound.Sname,StuInfofound.Sex,StuInfofound.Sno,StuInfofound.Age,StuInfofound.CInfo.Cno,StuInfofound.CInfo.Cname); if(found0) printf(n没有找到该班号的记录!n); BackQuiry(); 5.6.3 根据班号查询某个班级所有学生的学生证信息:void byCno() int found=-1; int num; int i; char ClaNO20; num=LoadFile(); if(num=0) printf(文件为空!);BackQuiry(); 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%s%sn,StuInfofound.Sname,StuInfofound.Sex,StuInfofound.Sno,StuInfofound.Age,StuInfofound.CInfo.Cno,StuInfofound.CInfo.Cname); if(found0) printf(n没有找到该班号的记录!n); BackQuiry();5.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:system(cls);Male();BackStastic();break;case 2:system(cls);Female();BackStastic();break;case 3:system(cls);StuMsg();BackStastic();break;case 4:menu(); 5.7.0 统计模块的公共函数,返回统计子菜单void BackStastic() printf(n请按enter键返回上级菜单!n); getchar(); getchar(); stastic();5.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; num=LoadFile(); if(num=0) printf(文件为空!); BackStastic(); for(i=0;inum;i+) if(strcmp(男,StuInfoi.Sex)=0) count+; return count; 返回男生平均年龄float MaleMG() int num; int count=0; float mAge=0; int i; num=LoadFile(); if(num=0) printf(文件为空!); BackStastic(); 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); 返回女生人数子函数int FemaleNum() int num; int count=0; int i; num=LoadFile(); if(num=0) printf(文件为空!); BackStastic(); for(i=0;inum;i+) if(strcmp(女,StuInfoi.Sex)=0) count+; return count;返回女生平均年龄float FemaleMG() int num; int count=0; float mAge=0; int i; num=LoadFile(); if(num=0) printf(文件为空!); BackStastic(); 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(); 返回全体学生的人数子函数int StuNum() int num; num=MaleNum()+FemaleNum(); return num; 返回全体学生的平均年龄子函数float MG() float mAge; mAge=(MaleNum()*MaleMG()+FemaleNum()*FemaleMG()/(MaleNum()+FemaleNum(); return mAge;5.8 删除模块 void Delete() int num; int i; int found=-1; char StuNO20; system(cls); num=LoadFile(); if(num=0) printf(文件为空!); BackMenu(); 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%s%sn,StuInfofound.Sname,StuInfofound.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=StuInfofound+1.Age; strcpy(StuInfofound.CInfo.Cno,StuInfofound+1.CInfo.Cno); strcpy(StuInfofound.CInfo.Cname,StuInfofound+1.CInfo.Cname); SaveFile(num-2); if(found0) printf(n没有找到该学号的记录:n); BackMenu(); BackMenu();六、上机操作6.2.0 主菜 单6.2.1 浏览数据6.2.2 添加添加该生信息后浏览结果:6.2.3 修改数据修改后的结果6.2.4 查询记录按学号查询:按姓名查询:按班级查询:6.2.5 统计数据男生统计信息:女生统计信息:全体学生统计信息:6.2.6 删除记录删除后的结果:七、总结 本次C语言课程设计非常有意义,它锻炼了我们解决实际问题的能力。由于本人对编程感兴趣,在编程方面有一定基础,因此尝试着由自己完成整个系统,在设计的过程里也遇到了很多麻烦,但是通过查询参考书和网络,一个个疑难迎刃而解。通过这次实践课,不只是强化了我们C语言编程的能力,更重要的是使我们学会了一种工作方法,学会了如何规划、组织、设计、实施项目,从整体到局部,从局部又到整体。此外,在设计流程图和编制报告的过程里也学了不少东西,学会了用制作流程图,学会了组织报告等等。八、源代码#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;/函数申明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 BackMenu(); /返回主菜单void BackQuiry(); /返回查询子菜单void BackStastic(); /返回统计子菜单int LoadFile(); /加载文件void SaveFile(int num); /保存文件void Input(int num); /输入第num+1个记录void main() menu(); getchar();void menu() /菜单int chose; int right; do system(cls); printf(ntttt学生证管理系统n); printf(); printf( 菜单:t1-添加t2-修改t3-浏览全部t4-查询t5-统计t6-删除t7-退出n); printf(); printf(请输入数字选择:); scanf(%d,&chose); if(chose7) 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 BackMenu() /返回主菜单 printf(n请按enter键返回主菜单!n); getchar(); getchar(); menu();int LoadFile() /读取文件 int i; FILE*fp; if(fp=fopen(StuInfo.txt,r)=NULL) return 0; /返回0,表示文件不存在 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); return i; /返回记录条数void Input(int num) /输入第num+1条记录 int i; int age; char sno20; char sex20; char cno20; int right; if(num=N) printf(n保存记录数超出结构体数组数的大小,请先修改N的值n); BackMenu(); 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);

温馨提示

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

评论

0/150

提交评论