1567159136 张玉前 学生基本信息管理系统

上传人:y****3 文档编号:12827680 上传时间:2020-05-29 格式:DOC 页数:43 大小:382KB
返回 下载 相关 举报
1567159136 张玉前 学生基本信息管理系统_第1页
第1页 / 共43页
1567159136 张玉前 学生基本信息管理系统_第2页
第2页 / 共43页
1567159136 张玉前 学生基本信息管理系统_第3页
第3页 / 共43页
点击查看更多>>
资源描述
BatchDoc Word文档批量处理工具内蒙古科技大学课程设计说明书C语言课程设计 学生基本信息管理系统学生姓名:张玉前学号:1567159136专业:软件工程班级:一班指导教师:褚燕华日 期:2015年1月 6 日内蒙古科技大学课程设计任务书4第一章需求分析51.1引言51.2任务概述61.3数据描述61.4功能需求61.5性能需求71.6 运行需求71.7 任务计划7第二章概要设计72.1 总体设计72.2 数据类型设计(或数据结构设计)82.3 接口设计92.4运行界面设计10第三章详细设计113.1输入模块设计113.2输出模块设计123.3查找模块设计13第四章测试分析194.1 测试程序执行情况194.2 出现的问题和解决的方法23第五章用户手册235.1 使用说明235.2 运行说明23第六章课程设计总结24程序源代码24参考文献25致谢26内蒙古科技大学课程设计任务书课程名称C语言课程设计设计题目学生基本信息管理系统指导教师褚燕华时间2015.1.52015.1.9一、教学要求1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力二、设计资料及参数每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。某班学生基本信息管理,包括以下功能:v 从键盘输入包括学号、姓名、性别、出生年月日、籍贯、所在院系、专业、奖惩信息等,并将其保存在磁盘文件里v 具有进行单项查询或多项查询的功能(即按照给定的关键字姓名等找出满足条件的纪录)v 具有插入、修改和删除信息的功能v 具有输出文件数据信息的功能三、设计要求及成果1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)2. 写出详细设计说明(至少包括功能实现分析和模块流程图)3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少500行代码,不包括注释和花括号)4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告(请严格按照模板进行排版)四、进度安排第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。六、建议参考资料1C语言程序设计,谭浩强,清华大学出版社2C语言程序设计课程设计,刘振安,机械工业出版社第一章需求分析1.1引言学生基本信息管理系统1.2任务概述1. 建立学生信息,信息至少包括姓名,学号,性别,年龄,出生日期,家庭地址,e_mail,电话地址等;2. 能够提供新建,浏览,查找,修改和删除信息的功能;3. 能够提供不同方式查询的功能;1.3数据描述struct studentchar NO20;char name20;int age;char sex3;char birthday10;char address30;char phone20;chare_mail20;struct student*next; /下个结点;1.4功能需求1、 输入功能:一次可以完成自定义学生人数的学生信息记录的输入。2、 删除功能:对指定学生信息进行删除。3、 修改功能:对指定学生信息进行修改。4、 查询功能:选择某种方式并输入该信息查询符合条件的学生信息。5、 排序功能:以英语课程的分数对学生信息进行排序。6、 显示功能:将以上操作后的学生信息显示出来。7、 退出主菜单。1.5性能需求1、 输入功能:一次可以完成自定义学生人数的学生信息记录的输入。2、 删除功能:对指定学生信息进行删除。3、 修改功能:对指定学生信息进行修改。4、 查询功能:选择某种方式并输入该信息查询符合条件的学生信息。5、 排序功能:以英语课程的分数对学生信息进行排序。6、 显示功能:将以上操作后的学生信息显示出来。7、 退出主菜单。1.6 运行需求运行时需要实现各个模块功能的函数来完成运行。1.7 任务计划输入学生 基本信息,对学生基本信息进行修改,删除,排序等,能够实现通过输入学生学号,姓名等进行查询学生信息第二章概要设计2.1 总体设计总体结构我们采取模块化进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。也可根据自己对题目的理解增加新的功能模块。系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的方式进行。功能模块学生管理系统4、输入你要查找学生姓名菜单1、 新增学生信息2、 删除学生信息3、 导入学生信息4、 学生信息搜素5、 学生信息保存6、 退出7、保存学生信息:提示保存成功,3、输出学生的姓名,学号,性别年龄,出生日期,家庭地址,e_mail,,电话2、输入要删除的学生编号,删除学生信息8,退出系统1、输入学生信息:学生姓名,学号,性别年龄,出生日期,电话如图2.12.2 数据类型设计(或数据结构设计)struct studentchar NO20;char name20;int age;char sex3;char birthday10;char address30;char phone20;chare_mail20;struct student*next; /下个结点;2.3 接口设计/函数声明表2.1: 函数列表函数名函数首部函数功能Voidshow_menu();void 显示菜单void menu();void执行菜单Voidcreat_stu();void建立链表voidinsert_stu();void print_stu();void学生信息录入Voidsearch_NO();void以学号方式查询Voidsearch_name();void以姓名方式查询void arrage_stu();void排序Voiddel_stu();void删除学生信息void revise_stu();void修改学生信息void save();void保存信息如图2.22.4 运行界面设计主菜单模块采用switch()函数从选择相应菜单对应功能switch(c)getchar();case 1:insert_stu();break; /学生信息录入case 2:print_stu();break; /学生信息浏览case 3:search_NO();break; /以学号方式查询信息case 4:search_name();break; /以姓名方式查询信息case 5:del_stu();break; /删除学生信息case 6:revise_stu();break; /修改学生信息case 7:arrage_stu();break; /保存学生信息case 0:exit(0); /退出 第三章详细设计3.1输入模块设计数据输入模块采用scanf()函数输入新联系人信息插入至就结构数据当中。printf(tt输入学生学号:t);scanf(%s,p1-NO); /学号printf(tt输入学生姓名:t);scanf(%s,p1-name); /姓名printf(tt输入学生年龄:t);scanf(%d,&p1-age); /年龄printf(tt输入学生性别:t);scanf(%s,p1-sex); /性别printf(tt输入学生出生年月:t);scanf(%s,p1-birthday); /出生年月printf(tt输入学生地址:t);scanf(%s,p1-address); /地址printf(tt输入学生电话:t);scanf(%s,p1-phone); /电话printf(tt输入学生E-mail:t);scanf(%s,p1-e_mail); /E-mail;n+;3.2输出模块设计数据浏览模块采用分屏显示,每屏3条记录。用fread或fscanf读文件,输出结果。for(p=head-next;p!=NULL;p=p-next) /读出信息 printf(*学生信息浏览*n);printf(tt学生学号:t%sn,p-NO);printf(tt学生姓名:t%sn,p-name);printf(tt学生年龄:t%dn,p-age);printf(tt学生性别:t%sn,p-sex);printf(tt学生出生年月:t%sn,p-birthday);printf(tt学生地址:t%sn,p-address);printf(tt学生电话:t%stn,p-phone);printf(tt学生E-mail:t%sn,p-e_mail);printf(n); /输出信息 3.3查找模块设计1)按姓名方式查找模块通过键盘输入要查找的学生姓名,然后与及结构数据中的姓名信息逐一对比,找出学生信息并输出void search_name() /学生姓名信息查找 STU*p=NULL;char name20; if(head=NULL) /判断链表是否为空 printf(文档中无记录!n);return ; printf(输入学生姓名:);scanf(%s,name);for(p=head-next;p!=NULL;p=p-next) /读出信息 if(!strcmp(p-name,name)1)按学号查找模块通过键盘输入要查找的学生学号,然后与结构数据中的电话信息逐一对比,找出学生信息并输出void search_NO() /学生学号信息查找 STU*p=NULL;char NO20; if(head=NULL) /判断链表是否为空 printf(文档中无记录!n);return ; printf(请输入学生学号:);scanf(%s,NO);for(p=head-next;p!=NULL;p=p-next) /读出信息 if(!strcmp(p-NO,NO)3.4 排序模块设计通过键盘输入学生的学号,按照学号从小到大进行排序voidarrage_stu() STU*p1,*p2;int in=0,j; if(head-next=NULL) /首先判断 printf(你还没有记录,无法排序n);return ; printf(n=%d,n); p1=head-next;for(in=0;innext;jnext,j+)if(j=0) /第一次比较第一个和第二个结点信息if(strcmp(p1-NO,p1-next-NO) /比较p1本身和p1下一个结点 p2=p1-next;p1-next=p1-next-next;p2-next=p1;head-next=p2;p1=head-next; /从新结合CUR赋值/*p1=head-next;p1=p2;if(strcmp(p1-next-NO,p1-next-next-NO) /比较p1下一个和p1下两个结点 p2=p1-next;p1-next=p1-next-next;p2-next=p1-next-next;p1-next-next=p2; if(strcmp(head-next-NO,head-next-next-NO) /只有两个结点信息时直接 /比较他们两个 p1=head-next;head-next=p1-next;p1-next=p1-next-next;head-next-next=p1; if(n=2) /只有两个结点信息时吧第二个结点的/next赋为空head-next-next-next=NULL;3.5保存及读取模块设计printf(n打不开文件!n);return ; if(head-next=NULL) printf(n信息为空!n);return ; void save()printf(*保存信息并结束*); STU*p=NULL; FILE*fp;char *filename=fname.txt; if(fp=fopen(fname.txt,w)=NULL) /出错检测 else p=head-next;while(p!=NULL) fprintf(fp,%s %s %d %s %s %s %s %sn,p-NO,p-name,p-age, p-sex,p-birthday,p-address,p-phone,p-e_mail); /存入 /文件 p=p-next; printf(保存完毕!n);fclose(fp);第四章测试分析4.1 测试程序执行情况主菜单输入学生信息学生信息浏览按学号查找学生信息按姓名查找学生信息修改学生信息4.2 出现的问题和解决的方法第一次时当输入学生信息时无法进行学生信息浏览,当引入了学生信息浏览函数,可以浏览多个学生信息。有了学生信息修改函数可以随时修改学生信息等等。第五章用户手册5.1 使用说明先选择录入信息,录入结束后按对应的数字跳出,执行其他任务 选择操作时点击对应的数字再按回车即可。5.2 运行说明请勿输入不符合格式的字符,如需退出 请输入对应数字。第六章课程设计总结在我们上机调试程序的过程中,我遇到了很多问题,这次程序设计我写了好长时间,从各种资料上找,参考,终于完成了。在这期末考试前期,各科结课,面临着各种考试,这次的课设我更是费尽心思,有时也因这样那样的原因,抱怨过,但在完成了课设之后,我发现我错了,课程设计不仅巩固了我们的知识,还使得我们学到了平时所忽略的细节,最要的是它磨练我们的毅力让我们在大学的下一阶段能更好的成长,最后走向成功,这是值得我们每一个人体验的。程序源代码#include#include#include#define LEN sizeof(struct student)/(*定义结构体*);struct studentchar NO20;char name20;int age;char sex3; /F表示性别男,M表示性别女char birthday10;char address30;char phone20;char e_mail20;struct student *next; /下个结点;typedef struct student STU;STU*head=NULL; /全局指针int n,i=0; /全局变量/(*自定义函数*);void show_menu(); /显示菜单void menu(); /执行菜单void creat_stu(); /建立链表void insert_stu(); /学生信息录入void print_stu(); /学生信息浏览void search_NO(); /以学号方式查询信息void search_name(); /以姓名方式查询信息void arrage_stu(); /排序void del_stu(); /删除学生信息void revise_stu(); /修改学生信息void save(); /保存信息void main() creat_stu(); menu();/(*创建链表*);void creat_stu()FILE *fp; long size;STU*p1,*p2;head=(STU*)malloc(sizeof(STU);head-next=NULL;if(fp=fopen(fname.txt,r)=NULL)printf(这是新表n);return ;fseek(fp,0L,2);size=ftell(fp);if(!size)printf(这是空表n);return ; /开始创建链表rewind(fp); /移到文件首部p2=head-next; / 找到当前位置while(!feof(fp)p1=(STU*)malloc(sizeof(STU);fscanf(fp,%s %s %d %s %s %s %s %sn,p1-NO,p1-name,&p1-age,p1-sex,p1-birthday,p1-address,p1-phone,p1-e_mail); p1-next=NULL;/创建结点完if(head-next=NULL)head-next=p1;elsep2-next=p1;p2=p1;n+;p2-next=NULL;fclose(fp);/(*执行菜单*);void menu() int c; show_menu(); while(1) scanf(%d,&c);switch(c)getchar();case 1:insert_stu();break;case 2:print_stu();break;case 3:search_NO();break;case 4:search_name();break;case 5:del_stu();break;case 6:revise_stu();break;case 7:arrage_stu();break;case 0:exit(0); /执行菜单选项 show_menu(); /(*显示菜单*);void show_menu()printf(n);printf(n*菜单*n);printf(tt 1.输入学生信息 n);printf(tt 2.浏览学生信息 n);printf(tt 3.以学号方式查询信息n);printf(tt 4.以姓名方式查询信息n);printf(tt 5.删除学生信息 n);printf(tt 6.修改学生信息n);printf(tt 7. 排 序n);printf(tt 0. 退 出n);printf(n*n);printf(n请选择n);/(*学生信息录入*);void insert_stu() /学生信息录入 n=0; STU*p1=NULL,*p2=NULL; p1=(STU*)malloc(sizeof(STU); printf(n*录入学生信息*n); printf(tt输入学生学号:t); scanf(%s,p1-NO); /学号 printf(tt输入学生姓名:t); scanf(%s,p1-name); /姓名 printf(tt输入学生年龄:t); scanf(%d,&p1-age); /年龄 printf(tt输入学生性别:t); scanf(%s,p1-sex); /性别 printf(tt输入学生出生年月:t); scanf(%s,p1-birthday); /出生年月 printf(tt输入学生地址:t); scanf(%s,p1-address); /地址 printf(tt输入学生电话:t); scanf(%s,p1-phone); /电话 printf(tt输入学生E-mail:t); scanf(%s,p1-e_mail); /E-mail; n+; if(head-next=NULL) head=(STU*)malloc(LEN); head-next=p1; else for(p2=head;p2-next!=NULL;p2=p2-next); /找到最后的结点,将增加的结点挂在上面 p2-next=p1; p1-next=NULL; save(); /保存到文件/(*学生信息浏览*n);void print_stu() /学生信息浏览 STU*p=NULL; if(head=NULL) /判断链表是否为空 printf(文档中无记录!n); return ; for(p=head-next;p!=NULL;p=p-next) /读出信息 printf(*学生信息浏*n); printf(tt学生学号:t%sn,p-NO); printf(tt学生姓名:t%sn,p-name); printf(tt学生年龄:t%dn,p-age); printf(tt学生性别:t%sn,p-sex); printf(tt学生出生年月:t%sn,p-birthday); printf(tt学生地址:t%sn,p-address); printf(tt学生电话:t%stn,p-phone); printf(tt学生E-mail:t%sn,p-e_mail); printf(n); /输出信息 /(*学生姓名信息查找*);void search_name() /学生姓名信息查找 STU*p=NULL; char name20; if(head=NULL) /判断链表是否为空 printf(文档中无记录!n); return ; printf(输入学生姓名:); scanf(%s,name); for(p=head-next;p!=NULL;p=p-next) /读出信息 if(!strcmp(p-name,name) printf(*你查找的学生是*n); printf(tt学生学号:t%sn,p-NO); printf(tt学生姓名:t%sn,p-name); printf(tt学生年龄:t%dn,p-age); printf(tt学生性别:t%sn,p-sex); printf(tt学生出月:t%sn,p-birthday); printf(tt学生地址:t%sn,p-address); printf(tt学生电话:t%stn,p-phone); printf(tt学生E-mail:t%sn,p-e_mail); printf(n); i=1; /输出信息 if(!i) printf(无该生信息!请查证:);/没有找到贷信息时的处理 / (*学生学号信息查找*);void search_NO() /学生学号信息查找 STU*p=NULL; char NO20; if(head=NULL) /判断链表是否为空 printf(文档中无记录!n); return ; printf(请输入学生学号:); scanf(%s,NO); for(p=head-next;p!=NULL;p=p-next) /读出信息 if(!strcmp(p-NO,NO) printf(*你找的学生是*n); printf(tt学生学号:t%sn,p-NO); printf(tt学生姓名:t%sn,p-name); printf(tt学生年龄:t%dn,p-age); printf(tt学生性别:t%sn,p-sex); printf(tt学生出生年月:t%sn,p-birthday); printf(tt学生地址:t%sn,p-address); printf(tt学生电话:t%stn,p-phone); printf(tt学生E-mail:t%sn,p-e_mail); printf(n); i=1; /输出信息 if(!i) printf(无该生信息!请查证:); /没找到信息时的处理 /(*修改学生信息*);void revise_stu() STU*p=NULL; if(head=NULL) /判断链表是否为空 printf(文档中无记录!n); return ; char NO20; printf(请输入学生的学号:t); scanf(%s,NO); for(p=head-next;p!=NULL;p=p-next) if(!strcmp(p-NO,NO) /验证信息是否正确 printf(*你要修改%s的学生*n); printf(tt学生学号:t%sn,p-NO); printf(tt学生姓名:t%sn,p-name); printf(tt学生年龄:t%dn,p-age); printf(tt学生性别:t%sn,p-sex); printf(tt学生出生年月:t%sn,p-birthday); printf(tt学生地址:t%sn,p-address); printf(tt学生电话:t%stn,p-phone); printf(tt学生E-mail:t%sn,p-e_mail); printf(n); /输出要修改的信息 i=1; printf(*修改学号为%s的学生*n,NO); strcpy(p-NO,NO); printf(tt输入修改学生姓名:t); scanf(%s,p-name); printf(tt输入修改学生年龄:t); scanf(%d,&p-age); printf(tt输入修改学生性别:t); scanf(%s,p-sex); printf(tt输入修改学生出生年月:t); scanf(%s,p-birthday); printf(tt输入修改学生地址:t); scanf(%s,p-address); printf(tt输入修改学生电话:t); scanf(%s,p-phone); printf(tt输入修改学生E-mail:t); scanf(%s,p-e_mail); printf(n); /输入修改信息 save(); if(!i) printf(无该生信息!请查证:); /没有找到时的处理 /(*删除学生信*);void del_stu() STU*p=NULL; if(head=NULL) /判断链表是否为空 printf(文档中无记录!n); return ; else char NO20; printf(请输入学生的学号:t); scanf(%s,NO); for(p=head;p!=NULL;p=p-next) if(!strcmp(p-next-NO,NO)/验证信息是否正确 printf(*你要删除的学生*); printf(tt学生学号:t%sn,p-next-NO); printf(tt学生姓名:t%sn,p-next-name); printf(tt学生年龄:t%dn,p-next-age); printf(tt学生性别:t%sn,p-next-sex); printf(tt学生出生年月:t%sn,p-next-birthday); printf(tt学生地址:t%sn,p-next-address); printf(tt学生电话:t%stn,p-next-phone); printf(tt学生E-mail:t%sn,p-next-e_mail); printf(n); /输出要删除的信息 i=1; if(p-next-next) printf(第一个n); p-next=p-next-next; else p-next=NULL; n-; save(); return ; if(!i) printf(无该生信息!请查证:); /没有找到信息时的处理 return ; /(*按学号排序*);void arrage_stu() STU*p1,*p2; int in=0,j; if(head-next=NULL) /首先判断 printf(你还没有记录,无法排序n); return ; printf(n=%d,n); p1=head-next; for(in=0;innext;jnext,j+) if(j=0)/第一次比较第一个和第二个结点信息 if(strcmp(p1-NO,p1-next-NO)/比较p1本身和p1下一个结点 p2=p1-next; p1-next=p1-next-next;p2-next=p1; head-next=p2; p1=head-next; /从新结合CUR赋值 /* p1=head-next; p1=p2; 错误:如果一个变量=它前一个结点的NEXT那么不可以说把另一个变量赋值 就可以改变它 前一个结点的NEXT它只能操作后结点! */ if(strcmp(p1-next-NO,p1-next-next-NO) /比较p1下一个和p1下两个结点 p2=p1-next; p1-next=p1-next-next; p2-next=p1-next-next; p1-next-next=p2; if(strcmp(head-next-NO,head-next-next-NO) /只有两个结点信息时直接 /比较他们两个 p1=head-next; head-next=p1-next; p1-next=p1-next-next; head-next-next=p1; if(n=2)/只有两个结点信息时吧第二个结点的 /next赋为空 head-next-next-next=NULL; /(*保存信息*);void save() printf(*保存信息并结束*); STU*p=NULL; FILE*fp; char *filename=fname.txt; if(fp=fopen(fname.txt,w)=NULL) /出错检测 printf(n打不开文件!n); return ; if(head-next=NULL) printf(n信息为空!n); return ; else p=head-next; while(p!=NULL) fprintf(fp,%s %s %d %s %s %s %s %sn,p-NO,p-name,p-age, p-sex,p-birthday,p-address,p-phone,p-e_mail); /存入文件 p=p-next; printf(保存完毕!n); fclose(fp);参考文献 c 语言程序设计 谭浩强 清华大学出版社。致谢BatchDoc Word文档批量处理工具
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 临时分类 > 职业技能


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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