1、 同学录管理系统详细设计说明书 课程名:软件工程 实验类型:设计型实验 (一)实验目的: 通过设计一个《同学录管理系统》,进一步熟悉C++中类的概念、基本知识和技能,类的封装、继承的实现方式。掌握面向对象程序设计的基本思路和方法,并利用所学的基本知识和技能解决简单的面向对象的程序设计问题。了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C++的理解与Visual C++环境的使用:逐步熟悉程序设计的方法,并养成良好的编程习惯。 2.实验原理:应用C语言编
2、写,引用各种函数,循环控制语句等设计源程序代码,使设计出来的系统有很好的结构化,便于用户清晰的了解系统并方便使用。 3,实验类型:本实验为设计型实验 (二)实验内容: 系统的功能分析: (1)系统管理:用户管理,修改密码,重新登录,退出系统 (2)数据操作:数据录入,数据查询,数据删除,显示所有记录,存盘并退出 数据库需求分析: 根据系统功能,可以确定以下数据项和数据结构: (1)数据录入,必须包括:姓名,性别,电话,家庭地址,邮编,E-mail等基本信息; (2)数据删除,删除某人的信息; (3)数据查询,可以按姓名,家庭住址,性别等多种方式查询; (4)显示所有信息
3、 (三)实验模块设计 (1) 为便于用户使用本系统时,对各个功能的选择,本系统设计一个操作简单的菜单工作方式。用户根据需要选择相应的菜单项,即可根据提示完成相应的功能。 (2) 各个模块设计 1.主函数main()模块:其功能为显示中文提示菜单,根据用户输入的菜单选项,调用相应功能的各个函数。 2.装填函数load()模块:其功能为由文件中的数据生成一个同学录的链表,如果文件不存在,则建立一个空链表。 3.插入函数insert()模块:其功能为插入一个记录。 4.显示函数display()模块:其功能为显示所有记录的姓名,性别,电话,家庭地址,邮编,E-mail。 5.查询
4、函数find()模块:其功能为按指定姓名进行查询。如果找到了,显示该记录的姓名,性别,电话,家庭地址,邮编,E-mail。如果未找到,则显示“对不起,此人信息不存在!”的信息。 6.删除函数deletee()模块:其功能为按指定姓名删除记录。如果找到了,删除该记录;如果未找到,则提示“对不起,此人信息不存在!”的信息。 7.保存函数save()模块:其功能为将同学录链表中的内容保存到文件中。 (3)main()函数流程图 开始 提示“请输入通讯录信息” 调用load()函数 打开相应文件 显示主菜单 根据choice值调用函数 调用 insert() 函数 调
5、用 display() 函数 调用 find() 函数 调用 deletee() 函数 调用 save() 函数 结束 (四)系统概要设计 同学录管理系统 数据录入 数据查询 数据删除 显示所有信息 数据保存 (五)详细设计 1.主函数功能如下: char diaplay(); 首页 void insert(); 添加同学 void delete(); 删除同学 void show_all(); 显示所有同学 void find(); 查询同学 2. 各个模块功
6、能的相应程序 (1)display() void display(NOD *head) {NOD *p; p=head; while(p!=NULL) {printf("name:%s\n",p->name); printf("email:%s\n",p->email); printf("time:%s\n",p->time); printf("phone:%s\n\n",p->phone); p=p->next; (2)find() void find(NOD *head) {NOD *p; char name[20]; printf("请输入要查找
7、的人的姓名:"); scanf("%s",name); p=head; while(p!=NULL) {if(strcmp(name,p->name)==0) {printf("name:%s\n",p->name); printf("email:%s\n",p->email); printf("time:%s\n",p->time); printf("phone:%s\n\n",p->phone); break; } else p=p->next; } if(p==NULL) printf("\n\t对不起,此人信息不存在!\n"); } (3)delete
8、 NOD *delete(NOD *head) {NOD*p,*q; char name[20]; printf("请输入要删除记录的姓名:"); scanf("%s",name); p=q=head; while(p!=NULL) {if(strcmp(name,p->name)==0) { if(head==p) head=p->next; else q->next=p->next; free(p); break; } else {q=p; p=p->next; } } if(p==NULL) printf("\n\t查无此
9、人\n"); return head; } (4)insert() NOD *insert(NOD *head) {NOD *temp,*p; p=head; temp=(NOD*)malloc(sizeof(NOD)); printf("\n\t 请输入姓名:"); scanf("%s",temp->name); printf("\n\t 请输入电子邮箱:"); scanf("%s",temp->email); printf("\n\t 请输入同学的时段:"); scanf("%s",temp->time); printf("\n\t 请输入手机号码:"); s
10、canf("%s",temp->phone); head=temp; temp->next=p; return head; } (六)各模块结构展示 (1)主目录 (2)显示所有记录: (3)数据的查询 (4)数据的录入 (5)数据的删除 (七)总结与分析 这次课程设计过程并没有我想象的那么容易,很多C语言,C++方面的语句,函数都已经不是很了解了,通过老师的讲解,网上课程设计教学的视频,重新系统的复习,并再一次加深印象,做出的程序仍有很多瑕疵,并不完美,所以以后应继续努力,加强自己的思维能力和动手能力。总
11、之,过程虽然很艰辛,但得到的结果还是很让自己满意的,继续努力!
(八)参考文献
《软件工程》,《C++程序开发》,《C语言程序设计》
(九)参考网站
Google,百度,enet网络学院等
源程序代码:
#include
12、ar name[20]; char email[40]; char time[20]; char phone[15]; NOD *next; }; FILE *fp; NOD *load(char filename[]) {NOD *p,*q,*head; struct person per; p=(NOD*)malloc(sizeof(NOD)); q=head=NULL; if((fp=fopen(filename,"rb"))==NULL) return head; else {while(!feof(fp)) { if
13、fread(&per,sizeof(struct person),1,fp)==1) { p=(NOD*)malloc(sizeof(NOD)); strcpy(p->name,per.name); strcpy(p->email,per.email); strcpy(p->time,per.time); strcpy(p->phone,per.phone); head=p; p->next=q; q=head; } } } fclose(fp); return(head); } NOD *insert(NOD *head)
14、{NOD *temp,*p; p=head; temp=(NOD*)malloc(sizeof(NOD)); printf("\n\t 请输入姓名:"); scanf("%s",temp->name); printf("\n\t 请输入电子邮箱:"); scanf("%s",temp->email); printf("\n\t 请输入同学的时段:"); scanf("%s",temp->time); printf("\n\t 请输入手机号码:"); scanf("%s",temp->phone); head=temp; temp->next=p; return hea
15、d; } void save(NOD *head,char filename[]) {NOD *p; struct person per; if((fp=fopen(filename,"wb"))==NULL) {printf("文件无法写入");exit(0); } else { p=head; while(p!=NULL) {strcpy(per.name,p->name); strcpy(per.email,p->email); strcpy(per.time ,p->time); strcpy(per.phone ,p->phone); if(fwri
16、te(&per,sizeof(struct person),1,fp)!=1) {printf("文件不能写入数据,请检查后重新运行.\n"); exit(0); } p=p->next; } fclose(fp); } } void display(NOD *head) {NOD *p; p=head; while(p!=NULL) {printf("name:%s\n",p->name); printf("email:%s\n",p->email); printf("time:%s\n",p->time); printf("phone:%s\n\n",p
17、>phone); p=p->next; } } void find(NOD *head) {NOD *p; char name[20]; printf("请输入要查找的人的姓名:"); scanf("%s",name); p=head; while(p!=NULL) {if(strcmp(name,p->name)==0) {printf("name:%s\n",p->name); printf("email:%s\n",p->email); printf("time:%s\n",p->time); printf("phone:%s\n\n",p->
18、phone); break; } else p=p->next; } if(p==NULL) printf("\n\t查无此人\n"); } NOD *deletee(NOD *head) {NOD*p,*q; char name[20]; printf("请输入要删除记录的姓名:"); scanf("%s",name); p=q=head; while(p!=NULL) {if(strcmp(name,p->name)==0) { if(head==p) head=p->next; else q->next=p->next; fr
19、ee(p); break; } else {q=p; p=p->next; } } if(p==NULL) printf("\n\t查无此人\n"); return head; } void main() {NOD *head; char fname[20]; int choise; printf("\t 请输入同学录文件名:"); scanf("%s",fname); head=load(fname); while(1) {printf("\t\t\t 同学录管理系统\n"); printf("\t=======================
20、\n"); printf("\t\t 1.按姓名查找\n"); printf("\t\t 2.按姓名删除\n"); printf("\t\t 3.增加新记录\n"); printf("\t\t 4.显示所有记录\n"); printf("\t\t 5.存盘并退出\n"); printf("\n\t 6.请选择(1-5):"); scanf("%d",&choise); switch(choise) {case 1:find(head);break; case 2:head=deletee(head);break; case 3:head=insert(head);break; case 4:display(head);break; case 5:save(head,fname);exit(0); default:printf("输入错误,请重新输入!\n"); } } }






