c++学生信息管理系统

上传人:痛*** 文档编号:163302343 上传时间:2022-10-21 格式:DOC 页数:20 大小:141.50KB
收藏 版权申诉 举报 下载
c++学生信息管理系统_第1页
第1页 / 共20页
c++学生信息管理系统_第2页
第2页 / 共20页
c++学生信息管理系统_第3页
第3页 / 共20页
资源描述:

《c++学生信息管理系统》由会员分享,可在线阅读,更多相关《c++学生信息管理系统(20页珍藏版)》请在装配图网上搜索。

1、学生信息管理系统课程设计报告同组人员:王立权(组长)赵丹菲孙逊陈光完成日期:2011-6-20指导教师:张光妲一、课程设计目的 1.通过C+课程设计,使学生能够将学到的面向对象的设计思想运用在具体的工作和学习 中,加深对类和对象的理解,要求学生对生活中许多具体的事物抽象出类,并掌握继承和派 生类、基类、虚函数和多态的概念。2、通过这次课程设计掌握C+语言程序设计的编程思想,为后续课程打下基础。3、培养我实际操作能力和实践能力,为以后的工作打下坚实的基础。课程设计的要求 利用学到的编程知识和编程技巧,要求学生:1、对系统进行功能模块分析、控制模块分析正确2、系统设计要能完成题目所要求的功能。3、

2、编程简练,可用,尽可能的使系统的功能更加完善和全面4、使用说明书、流程图要清楚。5、特别要求自己独立完成。二、课程设计的内容1、课程设计的题目及简介有新生来报到,要逐个录入其信息,如:学生姓名,学号,性别,年龄,出生日期,家庭地址,e-mail,电话文本界面为:1. 新增学生信息2. 删除学生信息3. 导入学生信息(已经保存于的文件信息)4. 学生信息搜索(按姓名或按学号)5. 学生信息统计6. 学生信息保存7. 退出2、设计说明总体结构我们采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。也可根据自己对题目的理解增加新的功能模块。系统以菜单界面方式(至少采用文本

3、菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行(1)首先,看题目要求,每一条记录包括一个学生姓名,学号,性别,年龄,出生日期,家庭地址,e-mail,电话。同时,应具备以下功能:1、输入功能:一次可以完成自定义学生人数的学生信息记录的输入。2、删除功能:对指定学生的信息进行删除。3、修改功能:对指定学生的信息进行修改。4、查询功能:选择某种方式并输入该信息查询符合条件的学生信息。5排序功能:以英语课程的分数为依据对学生信息进行排序。6显示功能:将以上功能操作后的学生信息显示出来。7退出主菜单。3 程序流程图 各功能模块的实现流程图:1增加学生信息调

4、用函数Node* Create()判断gg是否等于一如果是可创建链表输入相应的学生信息如果不是则需要运用Insert(p)函数插入结点增加学生信息的,并通过chundang(p)函数进行存档,具体流程如下图所示判断以前是否存储了学生信息是新增信息退出该功能,返回主菜单,继续选择流程图新增学生信息按提示:输入学个的各种信息按格式显示输入的学生信息 2删除学生信息 调用函数Node* Delete(Node* head , int num) 删除学生的信息则必须对链表结点进行删除意味着将某个要删除结点前后的连续打断,去掉该结点,使前后指针变量重新连接,完成链表结点的删除任务 流程图输入要删除学生信

5、息2退出该功能,返回主菜单,继续选择输入要删除信息的编号该生信息已删除,显示其他同学的信息输出所有学生的信息3导入学生信息打开存档文件ifstream Filein(out.txt);输出说存档的学生信息导入学生信息显示学生的信息退出该功能,返回主菜单,继续选择 4、学生信息的搜索 调用函数Node* sousuo(Node* head , char na20) ,按学生的姓名进行搜索退出该功能,返回主菜单,继续选择 输出所以查询的学生信息按照提示输入学生的姓名进行搜索搜索学生信息 4流程图:按学生信息进行排序5总功能模块图:2、输入要删除的学生的编号,删除学生信息。1输入学生的信息: 学生姓

6、名,学号,性别,年龄,出生日期,家庭地址,e-mail,电话 菜单1. 新增学生信息2. 删除学生信息3. 导入学生信息4. 学生信息搜索5. 学生信息保存6. 退出7保存学生信息:提示保存成功4、输入你要查找你学生姓名3、输出学生的学生姓名,学号,性别,年龄,出生日期,家庭地址,e-mail,电话8、退出系统学生管理系统功能模块图三任务分配陈光:学生信息的录入模块孙逊:学生信息的浏览模块赵丹菲:学生信息查找模块王立权:学生信息的修改模块各功能显示效果模块图:输入学生信息浏览学生信息查询学生信息修改学生信息4、程序清单/*:学生信息管理系统学生信息包括:学号,姓名,年龄,性别,出生年月,地址,

7、电话,E-mail等。实现的功能:(1) 系统以菜单方式工作(2) 学生信息录入功能(学生信息用文件保存)-输入(3) 学生信息浏览功能-输出(4) 查询、排序功能-算法(5) 按学号查询(6) 按姓名查询 (7)学生信息的删除与修改*/#include #include #include #define PF printf#define LEN sizeof(struct student)/定义结构体struct student char NO20; char name20; int age; char sex3; /*F表示性别男,M表示性别女*/ char birthday10; cha

8、r 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(

9、); /以姓名方式查询信息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

10、,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

11、) head-next=p1; else p2-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_st

12、u(); break; case 7:arrage_stu();break; case 0:exit(0); /执行菜单选项 show_menu(); /显示菜单void show_menu() PF(n); PF(n菜单n); PF(tt1.输 入 学 生 信 息 n); PF(tt2.浏 览 学 生 信 息 n); PF(tt3.以学号方式查询信息n); PF(tt4.以姓名方式查询信息n); PF(tt5.删 除 学 生 信 息 n); PF(tt6.修 改 学 生 信 息 n); PF(tt7 排 序 n); PF(tt0. 退 出 n); PF(n); PF(n请选择n);/学生信息

13、录入void insert_stu() /学生信息录入 n=0; STU *p1=NULL,*p2=NULL; p1=(STU *)malloc(sizeof(STU); PF(n录入学生信息n); /录入学生信息 PF(tt输入学生学号:t); scanf(%s,p1-NO); /学号 PF(tt输入学生姓名:t); scanf(%s,p1-name); /姓名 PF(tt输入学生年龄:t); scanf(%d,&p1-age); /年龄 PF(tt输入学生性别:t); scanf(%s,p1-sex); /性别 PF(tt输入学生出生年月:t); scanf(%s,p1-birthday)

14、; /出生年月 PF(tt输入学生地址:t); scanf(%s,p1-address); /地址 PF(tt输入学生电话:t); scanf(%s,p1-phone); /电话 PF(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; sa

15、ve();/保存到文件 /学生信浏览void print_stu() /学生信浏览 STU *p=NULL; if(head=NULL) /判断链表是否为空 PF(文档中无记录!n); return; for(p=head-next;p!=NULL;p=p-next) /读出信息 PF(学生信浏览n); PF(tt学生学号:t%sn,p-NO); PF(tt学生姓名:t%sn,p-name); PF(tt学生年龄:t%dn,p-age); PF(tt学生性别:t%sn,p-sex); PF(tt学生出生年月:t%sn,p-birthday); PF(tt学生地址:t%sn,p-address)

16、; PF(tt学生电话:t%sn,p-phone); PF(tt学生E-mail:t%sn,p-e_mail); PF(n); /输出信息 /学生姓名信息查找void search_name() /学生姓名信息查找 STU *p=NULL; char name20; if(head=NULL) /判断链表是否为空 PF(文档中无记录!n); return; PF(输入学生姓名:); scanf(%s,name); for(p=head-next;p!=NULL;p=p-next) /读出信息 if(!strcmp(p-name,name) PF(您查找的学生是n); PF(tt学生学号:t%s

17、n,p-NO); PF(tt学生姓名:t%sn,p-name); PF(tt学生年龄:t%dn,p-age); PF(tt学生性别:t%sn,p-sex); PF(tt学生出生年月:t%sn,p-birthday); PF(tt学生地址:t%sn,p-address); PF(tt学生电话:t%sn,p-phone); PF(tt学生E-mail:t%sn,p-e_mail); PF(n); i=1; /输出信息 if(!i) PF(无该生信息!请查证:); /没找到信息时的处理 /学生学号信息查找void search_NO() /学生学号信息查找 STU *p=NULL; char NO2

18、0; if(head=NULL) /判断链表是否为空 PF(文档中无记录!n); return; PF(请输入学生学号:); scanf(%s,NO); for(p=head-next;p!=NULL;p=p-next) /读出信息 if(!strcmp(p-NO,NO) PF(您查找的学生是n); PF(tt学生学号:t%sn,p-NO); PF(tt学生姓名:t%sn,p-name); PF(tt学生年龄:t%dn,p-age); PF(tt学生性别:t%sn,p-sex); PF(tt学生出生年月:t%sn,p-birthday); PF(tt学生地址:t%sn,p-address);

19、PF(tt学生电话:t%sn,p-phone); PF(tt学生E-mail:t%sn,p-e_mail); PF(n); i=1; /输出信息 if(!i) PF(无该生信息!请查证:); /没找到信息时的处理 /修改学生信息void revise_stu() STU *p=NULL; if(head=NULL) /判断链表是否为空 PF(文档中无记录!n); return; char NO20; PF(请输入学生的学号:t); scanf(%s,NO); for(p=head-next;p!=NULL;p=p-next) if(!strcmp(p-NO,NO) /验证信息是否正确 PF(你

20、要修改的学生是n); PF(tt学生学号:t%sn,p-NO); PF(tt学生姓名:t%sn,p-name); PF(tt学生年龄:t%dn,p-age); PF(tt学生性别:t%sn,p-sex); PF(tt学生出生年月:t%sn,p-birthday); PF(tt学生地址:t%sn,p-address); PF(tt学生电话:t%sn,p-phone); PF(tt学生E-mail:t%sn,p-e_mail); PF(n); /输出要修改信息 i=1; PF(修改学号为%s的学生n,NO); strcpy(p-NO,NO); PF(tt输入修改学生姓名:t); scanf(%s,

21、p-name); PF(tt输入修改学生年龄:t); scanf(%d,&p-age); PF(tt输入修改学生性别:t); scanf(%s,p-sex); PF(tt输入修改学生出生年月:t); scanf(%s,p-birthday); PF(tt输入修改学生地址:t); scanf(%s,p-address); PF(tt输入修改学生电话:t); scanf(%s,p-phone); PF(tt输入修改学生E-mail:t); scanf(%s,p-e_mail); PF(n); /输入修改信息 save(); if(!i) PF(无该生信息!请查证:); /*没找到信息时的处理*/

22、/删除学生信息void del_stu() STU *p=NULL; if(head=NULL) /判断链表是否为空 PF(文档中无记录!n); return; else char NO20; PF(请输入学生的学号:t); scanf(%s,NO); for(p=head;p!=NULL;p=p-next) if(!strcmp(p-next-NO,NO) /验证信息是否正确 PF(你要删除的学生是n); PF(tt学生学号:t%sn,p-next-NO); PF(tt学生姓名:t%sn,p-next-name); PF(tt学生年龄:t%dn,p-next-age); PF(tt学生性别:

23、t%sn,p-next-sex); PF(tt学生出生年月:t%sn,p-next-birthday); PF(tt学生地址:t%sn,p-next-address); PF(tt学生电话:t%sn,p-next-phone); PF(tt学生E-mail:t%sn,p-next-e_mail); PF(n); /输出要删除的信息 i=1; if(p-next-next) printf(第一个n); p-next=p-next-next; else p-next=NULL; n-; save(); return; if(!i) PF(无该生信息!请查证:); /没找到信息时的处理 return

24、; /按学号排序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-n

25、ext;/从新给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=hea

26、d-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(保存信息并结束n); 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(

27、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+课程设计,时间上说长不长,说短也不短,却让我学到了很多,第一点就是:C+很难,似乎是学不完的,你觉得自己了解一点,是总会发现还有很多自己所不懂的东西,还有很多自己所没探知的领域,很

28、多知识运用到实践中很有一定的难度,看着自己和同学的程序运行结果,突然发现C+真的很神奇,居然能运行出那么漂亮的系统,看着运行结果。在我们上机调试程序的过程中,我遇到了很多的问题,说实话这次课程设计自己没有出多大的力,大部分都是借鉴同学的设计成果,自己设计是总是觉得没有头绪,无从下手。看到同学认真看程序的样子,还有修改程序时的熟练,我很羡慕他,我想,我也要将C+学好,在将来能为我的就业加分。在这期末考试前期,学院给我们安排的课程设计周,总让我们觉的有些为难我们,这样一个复杂困难而又繁琐的作业,似乎弄得我们既没有时间也没有心情复习,我曾一度地抱怨过学院,在完成它之后,我发现我错了,课程设计不仅让我们巩固了所学的知识,还使得我们学习到了更多平时所忽略的,最重要的是,它磨砺了我们,让我们在大学的下一个阶段能更好的成长。五.参考文献1. c+从入门到精通 李伟明 侯春多编著 清华大学出版社2. c+程序设计教程 钱能 编著 清华大学出版社3. c+程序设计 刘娜娜 迟立颖 张光妲 陈淑鑫 刘恩军 张景林 北京航空大学出版社

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

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

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


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