学生证管理系统课程设计报告.doc
《学生证管理系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《学生证管理系统课程设计报告.doc(12页珍藏版)》请在咨信网上搜索。
学生证管理系统课程设计报告 C语言课程设计实验报告 课程设计题目:学生证管理系统 姓名: 学号: 班级: 专业: 指导教师: 2014年 1 月 2 日 学生证管理系统课程设计报告 1。需求分析。 根据学生证管理的需要,建一个“学生证管理系统”,以方便对学生证信息的各项管理操作。要求完成:1.能对学生证信息进行录入和修改2.能按照学号和班级号显示学生证信息和更改、删除信息。 2。总体设计. 根据以上分析,本系统主要包括:从键盘输入学生证信息、从指定的文件中读入学生证信息、按照学号和班号查询学生证信息、删除和修改学生证信息. (1) 主函数main():定义学生结构体数组,输出操作对话框,调用录入、查询、删除、输出等函数对学生证信息进行处理。 (2) 录入函数enter():从键盘输入学生证信息。 (3) 录入函数load():从文件输入学生证信息. (4) 查询函数search():按学号查找记录信息。 (5) 查询函数display():按班级查找记录信息. (6) 删除函数del():删除指定学号的学生记录. (7) 修改函数modify():按照指定学号修改记录。 学生证管理系统 程序功能机构图如下: 学号查询 班级查询 键盘输入 文件输入 修改记录 删除记录 3。详细设计. 本功能一共有16个函数,其中一个主函数,15个功能模块,每个功能模块都是由于主函数或其他功能模块调用,分别说明如下: 1.主函数main().输入操作s 输入菜单 开始 键盘输入 文件输入 删除记录 修改记录 班级查询 学号查询 继续操作否 结束 Y N 图1。2 主程序流程图 (2)键盘输入函数. 键盘输入函数主要完成学生信息从屏幕输入数据,并将数据保存到文本文件中,以备后用. 开始 流程图: 输入学生信息 是否继续 结束 Y N (3)文件输入函数。 文件输入函数主要完成学生信息从文件中读入数据. 开始 打开文件 结束 关闭文件 是否继续 读入学生证信息 Y N 图1.4文件输入流程图 (4)学号查询函数. 学号查询函数是完成由用户输入需要查询的学号,在现有学生信息中查询是否有此学生信息存在,查到输出学生全部信息,没查到则输出“此学生部存在”信息。 流程图如下: 开始 打开文件 读入学生证信息 输入查到学生信息 结束 关闭文件 输出学生不存在信息 查到否 输入查询学号 Y N 图1.5 学号查询流程图 (5)班级查询函数。 输出查到学生信息 结束 关闭文件 输出此班级学生不存在信息 查到否? 输入查询班号 读入学生信息 打开文件 开始 班级查询函数是完成由用户输入需要查询的班级,在现有学生信息中查询此班级的全部学生信息,查到输出全部信息,没差到则输出“此班级学生不存在”信息. Y N (6)学号删除函数。 学号删除函数是完成由用户输入需要删除的学号,在现有学生信息中查询是否有该学生信息存在,查到则删除此学生全部信息,没查到则输出“此学生不存在"信息。 程序流程图如下: 开始 打开文件 读入学生信息 输入删除学号 找到否? 输入此学生不存在信息 关闭文件 结束 删除此学生信息 Y N (7)修改函数。 修改函数主要是完成根据学号查找到学生信息,输出学生信息,然后修改学生信息。 修改此学生信息 结束 关闭文件 输出此学生不存在信息 找到否? 输入修改学号 读入学生学号 打开文件 开始 程序流程如下: Y N 图1。7 学号修改流程图 4.测试结果。 (1)程序运行主菜单 1.9 主菜单界面 (2)从文件输入并显示结果 (3)按学号查找。 (4)修改测试. (5)按班号浏览。 (6) 统计班级的人数。 (7)删除功能测试. 5。软件操作使用说明书. 本软件采用命令行对话方式进行操作,运行后出现主界面如图1。9所示,然后按菜单提示操作即可. 6。总结。 通过本次课程设计练习,我们学会了科学分析问题解决问题的方法,从问题分析下手,然后进行模块设计,详细设计,再进行代码编写和测试。在调试程序过程中,学会了分模块进行,避免了以前那种将程序全部功能都放在main()函数中完成的弊病,使得调试过程更加顺利.另外通过本次练习,在前面学习过程中碰到的诸如结构体使用.指针使用.函数之间参数传递等难点问题也迎刃而解了。 源代码: //student。h #include <stdio。h〉//I/O函数 #include <stdlib.h〉//标准库函数 #include <string.h〉//字符串函数 #include 〈ctype.h>//字符操作函数 #define M 50//定义常数表示记录数 typedef struct//定义数据结构 { char no[20];//学号 char name[20];//姓名 char sex[5];//性别 char classes[20];//班号 char subject[20];//学院专业 }STUDENTS; //以下是函数原型 #include”stufun。h” //student.cpp //菜单函数,函数返回值为整数,代表所选的菜单项 ....。.。.。。。。.。。。.。。.。。。.。..。。。.. int menu_select() { char s[80]; int c; printf(”******************************主菜单*********************\n”); printf("* 0。 输入学生证信息记录*\n”); printf(”* 1。 浏览学生证信息记录*\n”); printf(”* 2。 按学号查找*\n”); printf(”* 3。 按学号删除*\n”); printf(”* 4. 按学号修改*\n”); printf(”* 5。 插入学生记录*\n"); printf(”* 6。 保存记录到文件*\n”); printf(”* 7。 加载文件到内存*\n"); printf(”* 8。 按班号浏览*\n"); printf(”* 9.统计班级人数*\n”); printf(”* 10。程序退出*\n"); printf("*********************************************************\n"); do { printf(”\n 输入您的菜单选项编号(0-10):”); //提示输入选项 scanf("%s",s);//输入选择项 c=atoi(s);//将输入的字符串转化为整型数 getchar(); }while(c<0||c>10);//选择项不在0~10之间重输 return c;//返回选择项,主程序根据该数调用相应的函数 } //输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度 。。。。。.。.。.。。...。。..。。。. int enter(STUDENTS t[]) { int i,n; system(”cls”); printf(”\n请输入学生记录条数:\n"); scanf(”%d",&n);//输入记录数 printf(”请输入学生记录:\n”); printf(”学号 姓名 性别 班号 学院专业\n"); printf("-——-—--——————--————-----————--—--—-—-———--——-——-——-—-——--—-—----——---——-\n”); for (i=0;i〈n;i++) { scanf(”%s”,t[i]。no);//输入学号 scanf("%s”,t[i]。name);//输入姓名 scanf(”%s”,t[i]。sex);//输入性别 scanf("%s”,t[i]。classes);//输入班号 scanf("%s”,t[i].subject);//学院专业 } getchar(); return n;//返回记录条数 } //显示记录,参数为记录数组和记录条数 。。。.。.。。。。。.。.。。。。。..。... void list(STUDENTS t[],int n) { int i; system(”cls"); printf(”\n********************学生清单************************\n"); printf("学号 姓名 性别 班号 学院专业\n”); printf(”-—--———--———-—————--——--——————-—---—————-—--——-—-—————-—-—-——-—--—-—-—-—\n”); for(i=0;i〈n;i++) { printf(”%—20s%-20s%—10s%-10s%—10s\n",t[i].no,t[i].name,t[i].sex,t[i].classes,t[i]。subject); if((i+1)%10==0&&n%10〉0)//判断输出是否达到10条记录 { printf("-———---—---———--—-—-————-—————-——-——---———————--——-—----—---———-———-————\n”); printf("每页显示10条学生记录,按回车键向后翻页。。。\n”); getchar(); system("cls”); printf("\n********************学生清单************************\n”); printf(”学号 姓名 性别 班号 学院专业\n”); printf(”—--—-————-—-——--—--—-——--——---——-—-—————-————-—-———————-——-—--—-——--—---\n"); } } printf(”-——-—————---——---———————--—-—-——-—---—-—-——————--——-————---———-———---——-\n”); } //查找记录 。.。.。。。。......。。。.。。。。...。 void search(STUDENTS t[],int n) { char s[20];//保存待查找学号字符串 int i;//保存查找到结点的序号 system("cls"); printf(”请输入查找的学号:\n”); scanf(”%s",s);//输入待查找学号 getchar(); i=find_no(t,n,s);//调用find_no函数,得到一个整数 if(i>n-1)//如果整数i值大于n—1,说明没找到 printf("没有学号为%s的学生!\n”,s); else print(t[i]);//找到,调用显示函数显示记录 } //删除函数,参数为记录数组和记录条数 .。..。。。。。。。.。...。。.。。。。。。。。 int del(STUDENTS t[],int n) { char s[20];//要删除记录的学号 int ch=0; int i; printf(”请输入要删除的学生学号:\n”); scanf(”%s”,s);//输入学号 getchar(); i=find_no(t,n,s);//调用find_no函数 if(i==n) printf(”没有找到学号为%s的学生!\n",s); else { printf("正在删除中!\n”); for(;i〈n;i++)//从删除位置开始依次前移学生记录 { strcpy(t[i]。name,t[i+1]。name); strcpy(t[i].no,t[i+1]。no); strcpy(t[i].sex,t[i+1].sex); strcpy(t[i]。classes,t[i+1]。classes); strcpy(t[i]。subject,t[i+1]。subject); } n-—;//删除后记录数减1 printf("删除成功!\n”); } return n;//返回记录数 } //插入记录函数,参数为结构体数组和记录数 。...。。。..。。。。.。....。。。。.。。。。。.。.。 int add(STUDENTS t[],int n) { STUDENTS temp;//新插入记录信息 int i,j; char s[20];//确定插入在哪个记录之前 printf(”请输入要插入的学生记录:\n”); printf("************************************************\n"); printf("学号 姓名 性别 班号 学院专业\n”); printf(”—-—————-—————-———-———-—-——-————-——-——-——-———-—--—------—-—--—————------—\n”); scanf(”%s%s%s%s%s”,temp。no,temp.name,temp.sex,temp。classes,temp。subject); //输入插入信息 getchar(); printf("——-—-——--———---——————-——---———-———----—-—--———————-———-————————-———--——-\n”); if(n>0) { printf("请输入插入位置的姓名,将新记录插入在该名字前:\n”); scanf(”%s”,s);//输入插入位置的姓名 getchar(); i=find_name(t,n,s);//调用find_name,确定插入位置 } else i=0; for(j=n-1;j>=i;j——)//从最后一个结点开始向后移动一条 { strcpy(t[j+1].no,t[j]。no); //当前记录的学号拷贝到后一条 strcpy(t[j+1]。name,t[j]。name); //当前记录的姓名拷贝到后一条 strcpy(t[j+1]。sex,t[j]。sex); //当前记录的性别拷贝到后一条 strcpy(t[j+1].classes,t[j]。classes); //当前记录的班号拷贝到后一条 strcpy(t[j+1]。subject,t[j].subject); //当前记录的学院专业拷贝到后一条 } strcpy(t[i].no,temp。no); //将新插入记录的学号拷贝到第i个位置 strcpy(t[i].name,temp。name); //将新插入记录的姓名拷贝到第i个位置 strcpy(t[i].sex,temp。sex); //将新插入记录的性别拷贝到第i个位置 strcpy(t[i]。classes,temp.classes); strcpy(t[i].subject,temp。subject); //将新插入记录的年龄拷贝到第i个位置 n++; //记录数加1 return n; //返回记录数 } //保存函数,参数为结构体数组和记录数 。。.。.。。。.。。。.。。.。。。..。..。.。.。.。。。。 void save(STUDENTS t[],int n) { int i; FILE *fp; //指向文件的指针 if((fp=fopen(”record.txt”,”wb”))==NULL)//打开文件,并判断打开是否正常 { printf("无法打开学生记录文件!\n");//打开失败 exit(1); //退出 } printf(”\n正在保存中\n”); fprintf(fp,”%d",n); //将记录数写入文件 fprintf(fp,”\r\n"); //将换行符号写入文件 for(i=0;i〈n;i++) { fprintf(fp,"%—20s%-30s%—10s%-10s%-10s”,t[i]。no,t[i]。name,t[i].sex,t[i]。classes,t[i].subject); //格式写入记录 fprintf(fp,”\r\n");//将换行符号写入文件 } fclose(fp);//关闭文件 printf(”****保存成功***\n”);//显示保存成功 } //读入函数,参数为结构体数组 .。......。..。。。。。。。。.。。....。。. int load(STUDENTS t[]) { int i,n; FILE *fp;//指向文件的指针 if((fp=fopen("record。txt","rb"))==NULL)//打开文件 { printf(”无法打开学生记录文件!\n");//打开失败 exit(1);//退出 } fscanf(fp,”%d”,&n); //读入记录数 for(i=0;i〈n;i++) fscanf(fp,"%20s%30s%10s%10s%10s",t[i].no,t[i]。name,t[i]。sex,t[i]。classes,t[i]。subject); //按格式读入记录 fclose(fp); //关闭文件 printf("已经成功加载学生记录文件到内存!\n"); //显示保存成功 return n; //返回记录数 } //按班号显示记录函数 。.。。。。。。。。。。.。。。。.。.。.。。..。。.。..。 void display(STUDENTS t[],int n) { int i; char s[20]; printf(”请输入班号:\n"); scanf("%s”,s); //输入班号 getchar(); i=find_classes(t,n,s); if(i〉n-1) printf(”没有班号为%d的班级\n",s); else { printf(”\n********************学生清单************************\n”); printf("学号 姓名 性别 班号 学院专业\n”); printf(”—-—-—-———-—--——-————-—--—-———-—-—————-—-——-—-—-——-———-—-——————-—-—--——-—\n—”); for(i=0;i〈n;i++) { if(strcmp(s,t[i].classes)==0) { printf(”%—20s%—20s%—10s%-10s%—10s\n”,t[i].no,t[i]。name,t[i]。sex,t[i]。classes,t[i].subject); } } printf(”——-—————---——-————-————-—--—-—-——--——-----—--———-——-——————-——-—--—--———-\n—”); } } //按班号统计人数..。。。.。。 void classcount(STUDENTS t[],int n) { int i; char s[20]; printf(”请输入班号:\n”); scanf(”%s”,s); //输入班号 getchar(); i=find_classes(t,n,s); if(i>n—1) printf(”没有班号为%d的班级\n",s); else { int j=0; for(i=0;i〈n;i++) if(strcmp(s,t[i]。classes)==0) j++; printf("该班一共有%d人\n",j); } } //显示指定的一条记录 void print(STUDENTS temp) { printf("\n****************************************************\n”); printf(”学号 姓名 性别 班号 学院专业\n”); printf(”————-———-————--—-—-——-—-—-------—-——-———-——-—-—-—————————————--—-——-—-—-\n"); printf(”%—20s%-20s%-10s%-10s%—10s\n",temp.no,temp.name,temp.sex,temp。classes,temp.subject); printf(”--—-—--—-———-—--——-—---—-—-——--—--—--—---———————-————-—----—————-————--—\n”); } //按姓名查找函数,参数为记录数组和记录条数以及姓名s 。.。。.。。.。.。.。.。.。。..。。...。.。。。。。。.. int find_name(STUDENTS t[],int n,char *s) { int i; for(i=0;i<n;i++) //记录开始,直到最后一条 { if(strcmp(s,t[i].name)==0) //记录中的姓名和待比较的姓名是否相等 return i; //相等,则返回该记录的下标号,程序提前结束 } return i; //返回i值 } //按班号查找函数,参数为记录数组和记录条数以及姓名s 。。。。。。。.。。。。。。。..。.。。。。。。。。。....。。。 int find_classes(STUDENTS t[],int n,char *s) { int i; for(i=0;i〈n;i++) //记录开始,直到最后一条 { if(strcmp(s,t[i]。classes)==0) //记录中的姓名和待比较的姓名是否相等 return i; //相等,则返回该记录的下标号,程序提前结束 } return i; //返回i值 } //按学号查找函数,参数为记录数组和记录条数以及学号no ..。.。。。。。.。。。。。。。....。.。。. int find_no(STUDENTS t[],int n,char *no) { int i; for(i=0;i〈n;i++) //从第一条记录开始,直到最后一条 { if(strcmp(no,t[i]。no)==0) //记录中的学号和待比较的学号是否相等 return i; //相等,则返回该记录的下标号,程序提前结束 } return i; //返回i值 } //修改函数,按照输入学号修改 void modify(STUDENTS t[],int n) { char no[20]; //要修改记录的学号 int ch=0; int i; printf("请输入要修改的学生学号:\n”); scanf(”%s”,no);//输入学号 getchar(); i=find_no(t,n,no); //调用find_no函数 if(i==n) printf(”没有找到学号为%s的学生!\n",no); else { printf(”学号为%s的学生修改前:\n”,no); print(t[i]); printf("请输入修改后学生记录:\n”); printf("学号 姓名 性别 班号 学院专业\n”); printf("-----—————-—————-—-————---—-————-—-———————--——--———-——-—————-————-—---——\n”); scanf(”%s”,t[i]。no); scanf("%s",t[i]。name); scanf(”%s",t[i].sex); scanf("%s",t[i]。classes); scanf(”%s",t[i]。subject); getchar(); printf(”学号为%s的学生修改后:\n”,no); print(t[i]); } } //main.cpp //主函数开始 void main() { STUDENTS stu[M]; //定义结构体数组 int length; //保存记录长度 for(;;) //无限循环 { system("cls”); //清屏 switch(menu_select()) //调用主菜单函数,返回值作为开关语句的条件 { case 0:length=enter(stu);break; //输入记录 case 1:list(stu,length);break; //显示全部记录 case 2:search(stu,length);break; //按学号查找记录 case 3:length=del(stu,length);break; //按学号删除记录 case 4:modify(stu,length);break; //按学号修改记录 case 5:length=add(stu,length);break; //插入记录 case 6:save(stu,length);break; //保存文件 case 7:length=load(stu);break; //加载文件到内存 case 8:display(stu,length);break; //按班号显示记录 case 9:classcount(stu,length);break; //统计班级人数 case 10:exit(0); //程序结束 } printf("按回车键返回主菜单。.。\n”); //提示信息 getchar(); } return; } 12- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生证 管理 系统 课程设计 报告
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文