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