欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:33457940       资源大小:323.50KB        全文页数:34页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    精品文档,仅供学习与交流,如有侵权请联系网站删除C语言课程设计报告学 院: 地 球 科 学 学 院 专 业: 资源环境与城乡规划管理题 目: 学 生 证 管 理 系 统 班 号: 014072-XX 姓 名: 李 仙 伟 学 号: XXXXXXXX 指导教师: XXXXXXXX 2010年11月26日报告目录一、课程设计目的 3二、实习内容及要求 3 三、需求分析 3四、总体分析 3五、详细设计 45.0 头文件及结构体 45.1 主函数55.2 菜单模块55.3 添加模块65.4 修改模块10 5.5 浏览模块 14 5.6 查询模块 15 5.6.1 按学号查询 15 5.6.2 按名字查询 16 5.6.3 按班级查询 175.7 统计模块 18 5.7.1 男生信息19 5.7.2 女生信息21 5.7.3 全体学生信息 23 5.8 删除模块 23六、上机操作 26 6.1 系统说明 266.2 系统测试 26 七、总结 32八、源代码 32一、课程设计目的通过实践,学会编制结构清晰、风格良好、数据结构适当的C语言程序,加深对C语言基础知识的理解和掌握,进一步巩固C语言编程实践能力,锻炼思维逻辑和解决综合性实际问题的能力。二、实习内容及要求1、用C语言编写一个学生证管理系统,该系统具有以下功能: (1)录入某位学生的学生证信息;(2)给定学号,显示某位学生的学生证信息;(3)给定某个班级的班号,显示该班所有学生的学生证信息;(4)给定某位学生的学号,修改该学生的学生证信息;(5)给定某位学生的学号,删除该学生的学生证信息;(6)提供一些统计各类信息的功能;(7)提供浏览所有学生的学生证信息的功能。2、输入要求应用程序运行后,在屏幕上显示一个菜单;用户可以根据要求,选定相应的操作项目;进入某个操作后,根据应用程序的提示,从键盘输入相应的信息。3、输出要求(1)应用程序运行后,要在屏幕上显示一个菜单;(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。三、需求分析根据题目要求,学生信息要从文本文件中存取,所以本程序应该提供读写文件,显示、统计、查询、修改记录,保存文件等操作,此外,还应该提供键盘式选择菜单实现功能。四、总体设计根据需求分析,可以把这个系统的设计分为添加、修改、查询、浏览、统计、删除六大模块,其中查询模块可以分为三个子模块,统计模块可以分为三个子模块,子模块下面还有子函数;系统功能模块图如下所示:五、详细设计5.0 头文件及结构体#include<stdio.h>#include<stdlib.h>#include<string.h>#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 printf("ntttt学生证管理系统n"); printf("········································"); printf(" 菜单:t1-添加t2-修改t3-浏览全部t4-查询t5-统计t6-删除t7-退出n"); printf("········································"); printf("请输入数字选择:"); scanf("%d",&chose); if(chose<1|chose>8) 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 添加模块首先要判断文件StuInfo.txt是否存在,如果存在就以读写(r+)的方式打开,如果不存在,就以写(w)的方式创建文件StuInfo.txt。输入格式要求:性别为男或女,学号为11位且不能重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。此外,如果以读写的方式打开,还要判断记录数num<N是否成立,因为结构体数组的大小为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(age<=0|age>100) 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;i<num;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(age<=0|age>100) 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();5.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;i<num;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;i<num;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(age<=0|age>100) 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;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"); printf("n请按enter键返回主菜单!n"); getchar(); getchar(); menu(); if(found<0) printf("n没有找到该学号的记录:n"); printf("n请按enter键返回主菜单!n"); getchar(); getchar(); menu();5.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;i<num;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();5.6 查询模块void quiry() int chose; int right; do printf("n1-按学号查询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();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(); 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;i<num;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(found<0) printf("n没有找到该班号的记录!n"); printf("n请按enter键返回上级菜单!n"); getchar(); getchar(); quiry();5.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;i<num;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(found<0) printf("n没有找到该班号的记录!n"); printf("n请按enter键返回上级菜单!n"); getchar(); getchar(); quiry();5.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;i<num;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(found<0) /found小于0,说明不存在班号的学生记录 printf("n没有找到该班号的记录!n"); printf("n请按enter键返回上级菜单!n"); getchar(); getchar(); quiry();5.7 统计模块该模块实现了基本的统计功能,包括分别统计男女生的人数、平均年龄,以及全体学生的人数和基本年龄;void stastic() int chose; int right; do printf("n1-全体男生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();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() int nu

    注意事项

    本文(学生证管理系统(C语言课程设计).doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开