同学录管理系统需求分析报告.docx
《同学录管理系统需求分析报告.docx》由会员分享,可在线阅读,更多相关《同学录管理系统需求分析报告.docx(15页珍藏版)》请在冰豆网上搜索。
同学录管理系统需求分析报告
同学录管理系统详细设计说明书
课程名:
软件工程
实验类型:
设计型实验
(一)实验目的:
通过设计一个《同学录管理系统》,进一步熟悉C++中类的概念、基本知识和技能,类的封装、继承的实现方式。
掌握面向对象程序设计的基本思路和方法,并利用所学的基本知识和技能解决简单的面向对象的程序设计问题。
了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C++的理解与VisualC++环境的使用:
逐步熟悉程序设计的方法,并养成良好的编程习惯。
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()函数流程图
(四)系统概要设计
(五)详细设计
1.主函数功能如下:
chardiaplay();首页
voidinsert();添加同学
voiddelete();删除同学
voidshow_all();显示所有同学
voidfind();查询同学
2.各个模块功能的相应程序
(1)display()
voiddisplay(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()
voidfind(NOD*head)
{NOD*p;
charname[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;
charname[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");
returnhead;
}
(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;
returnhead;
}
(六)各模块结构展示
(1)主目录
(2)显示所有记录:
(3)数据的查询
(4)数据的录入
(5)数据的删除
(七)总结与分析
这次课程设计过程并没有我想象的那么容易,很多C语言,C++方面的语句,函数都已经不是很了解了,通过老师的讲解,网上课程设计教学的视频,重新系统的复习,并再一次加深印象,做出的程序仍有很多瑕疵,并不完美,所以以后应继续努力,加强自己的思维能力和动手能力。
总之,过程虽然很艰辛,但得到的结果还是很让自己满意的,继续努力!
(八)参考文献
《软件工程》,《C++程序开发》,《C语言程序设计》
(九)参考网站
Google,XX,enet网络学院等
源程序代码:
#include
#include
#include
#defineNODstructemail_list
structperson
{charname[20];
charemail[40];
chartime[20];
charphone[15];
};
NOD
{charname[20];
charemail[40];
chartime[20];
charphone[15];
NOD*next;
};
FILE*fp;
NOD*load(charfilename[])
{NOD*p,*q,*head;
structpersonper;
p=(NOD*)malloc(sizeof(NOD));
q=head=NULL;
if((fp=fopen(filename,"rb"))==NULL)
returnhead;
else
{while(!
feof(fp))
{if(fread(&per,sizeof(structperson),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;
returnhead;
}
voidsave(NOD*head,charfilename[])
{NOD*p;
structpersonper;
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(structperson),1,fp)!
=1)
{printf("文件不能写入数据,请检查后重新运行.\n");
exit(0);
}
p=p->next;
}
fclose(fp);
}
}
voiddisplay(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;
}
}
voidfind(NOD*head)
{NOD*p;
charname[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;
charname[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");
returnhead;
}
voidmain()
{NOD*head;
charfname[20];
intchoise;
printf("\t请输入同学录文件名:
");
scanf("%s",fname);
head=load(fname);
while
(1)
{printf("\t\t\t同学录管理系统\n");
printf("\t==============================================\n");
printf("\t\t1.按姓名查找\n");
printf("\t\t2.按姓名删除\n");
printf("\t\t3.增加新记录\n");
printf("\t\t4.显示所有记录\n");
printf("\t\t5.存盘并退出\n");
printf("\n\t6.请选择(1-5):
");
scanf("%d",&choise);
switch(choise)
{case1:
find(head);break;
case2:
head=deletee(head);break;
case3:
head=insert(head);break;
case4:
display(head);break;
case5:
save(head,fname);exit(0);
default:
printf("输入错误,请重新输入!
\n");
}
}
}