软件综合实习设计报告.docx
《软件综合实习设计报告.docx》由会员分享,可在线阅读,更多相关《软件综合实习设计报告.docx(21页珍藏版)》请在冰豆网上搜索。
软件综合实习设计报告
安徽工业大学计算机学院
软件工程导论实验报告
通讯录管理系统
学院:
计算机学院
班级:
软件工程班
姓名:
XXX
学号:
XXXXXX
教师:
胡增涛
目录
1、可行性研究-------------------------------4
a)项目由来
b)可选方案
c)可行性
2、需求规格说明---------------------------5
1、基本目标
2、功能要求
3、数据需求
3、详细设计---------------7
4、程序源代码与测试---------------------11
5、测试内容和结果表+运行效果抓图--------------------------19
6、总结----------------------------26
题目
通讯录管理系统的课程报告
课程设计内容简介:
在原有的代码基础上进行修改,使之更加简明、易操作,提高了代码的实际用途,使其更加人性化,主界面更加简洁明了,便于人机沟通。
并且耗时较短,对设备和人力的要求较低,开发成本最大程度上得到了控制。
。
设计者姓名
XXX
指导老师意见:
指导老师签名
一、可行性研究报告
1.项目由来
随着网络与信息技术的发展,社会的关系愈加复杂,人们的联系人越来越多,需要联系的人逐渐增多,需要记录的信息也是与日巨增。
通常是将这些信息手写到通讯录中,但是这样很容易使信息丢失,而且庞大的信息都手写入通讯录中使得查找起来很不方便。
于是通讯录管理系统是一个非常通用的管理系统了。
在现今生活中我们很多地方都需要拥有自己的通讯录管理系统,以便简单而明确地对自己的同学、同事、朋友等信息资料的管理及使用。
2.可选方案
对原有的通讯录进行一定程度上的改进代码,如:
通过增加函数以实现更多的功能,并且实现同学信息的管理,包括同学信息的添加、修改、查询和删除,及一些辅助项目管理,如登录系统用户管理和用户组管理。
系统的组成模块主要包括数据集模块,登录窗体模块,系统管理模块,主窗体模块,通讯录模块,通讯录数据管理模块,信息管理模块,登录信息查询模块。
3.可行性
:
技术可行性
本程序是在原有的通讯录代码的基础上进行修改而得的,只是简单的添加了个别功能与输出格式,所用C语言知识不是太过复杂,只是简单的应用,同时开发所需设备(个人电脑)容易获得,所以只需要一定的时间进行熟悉现有代码并进行修改设计便可个人独立完成。
技术可行性较高。
:
经济可行性
在开发成本上,技术设备与人员要求较低,成本低廉。
而在社会上,通讯录管理系统的需求量较大,尤其是更加适合、适应人们生活的通讯录管理系统尤为受人们的喜爱,所以一个好的通讯录管理系统在社会上的前景是很好的,并且通讯录管理系统的后期维护与更新较为简单,且成本同样不高。
这样可知通讯录管理系统的收益远远大于成本。
:
社会可行性
显而易见通讯录管理系统在法律上是可行的,毕竟不犯法嘛!
而在用户关系上,通讯录管理系统的适用用户是广大的全部社会群体,用户数量庞大。
可行性很大。
二、需求规格说明
1.基本目标
通过在原程序基础上进行一定程度上的修改,使其界面更加简洁明了。
本设计主要包括系统用户管理模块、用户基本资料模块。
根据这些功能,设计出系统的功能模块,分别是查询(查看、预览、排序)模块,具体实现了用户和人员信息的查看和预览;更新(添加、修改、删除)模块,具体实现了用户和(新)人员信息的登记,修改和删除;生成预览报表(显示通讯录),具体实现了人员信息的总的查看和浏览。
2.功能要求
由主函数读入用户的命令,进行判断,如果命令符合预定规则,则确认请求,并执行相应的命令(显示、添加、按姓名查找、删除、排序、从文件读取、写入文件),执行后对屏幕进行更新,然后读入第二条命令,如此往复。
2.数据需求
定义了结构体数据变量,指针数据变量等数据类型。
说明:
main()函数打开通讯录
Menu()函数选择要操作的功能
Load()函数读取文件内容到通讯录
List()函数显示通讯录中的内容
App函数添加记录到通讯录
Search函数按姓名查找
Dele函数删除记录
Save函数保存记录
Sort函数按姓名排序
总体设计
详细设计
主要功能模块的算法设计思路如下:
1、添加信息函数
(1)定义指向结构体变量的指针;
(2)移动指针,找到插入结点;
(3)在要插入的结点输入信息;
(4)调用保存函数,打开文件,保存输入信息。
2、修改信息函数
(1)定义指向结构体变量的指针;
(2)用指针检验原通讯录是否有记录,若没记录,返回主函数;
(3)根据要修改的编号查找对应结点;
(4)修改信息;
(5)打开文件,保存修改记录。
3、删除信息函数
(1)定义指向结构体变量的指针;
(2)用指针检验原通讯录中是否有记录,若没记录,返回主函数;
(3)根据要修改的编号查找要删除的结点;
(4)修改链表,删除对应结点。
4、显示记录函数
(1)打开文件;
(2)用指针检验是否有记录;
(3)若无记录,输出提示信息,返回主函数;若有记录,移动指针,依次输出记录;
(4)关闭文件。
5、查询通讯录信息
(1)选择查询方式(姓名);
(2)输入查询关键字:
(3)在链表中寻找相应结点;
(4)调用输出函数,输出结点信息。
各个函数的流程图如下:
添加信息
FILE*p,打开该磁盘文件
从键盘输入数据
有0条
输出当前通讯录中的内容
有n条
插入表头
插入表尾
输出数据,存入磁盘文件
关闭文件
显示信息
FILE*fp,打开该文件
p=head,使p指向第一个结点
P指向的不是尾结点
真假
输出p所指向的结点
P指向下一个结点
关闭文件
按姓名查找
打开磁盘文件
是链表为空否
输出“尚无记录信息”
p=head
当name2=p->name
是P是要找的结点否
输出此结点
输出“查无此人“的信息
关闭文件
删除函数:
打开文件选择删除服务
输入要删除记录的编号
否
该记录是否存在
是
没有该记录
成功删除
返回主菜单
排序函数:
打开文件选择排序服务
是
按姓名排序是否显示
否
排序后结
返回主菜单
保存函数:
打开该文件
是假
联系人是否为0
否
输出p所指向的结点
P指向下一个结点
返回主菜单
程序源代码与测试
#include
#include
#include"string.h"/*字符串函数库*/
#defineSIZE80
#defineHEADER1"-------------------------------王海峰的通讯录-------------------------------\n"/*宏变量*/
#defineHEADER2"|编号|姓名|年龄|电话号码|邮箱|地址|邮编|\n"
#defineHEADER3"|------|---------------|--------|-------------|-----------|---------|---------|\n"
#defineFORMAT"|%-6s|%-15s|%-8s|%-13d|%-11s|%-9s|%-9s|\n"
#defineDATAp->data.num,p->data.name,p->data.age,p->data.tel,p->data.email,p->data.addr,p->zip
structrecord
{
intnum;
charname[9];
intage;
chartel[13];
charemail[20];
charaddr[20];
charzip[7];
}rec[SIZE];
inti,m=0;//m为当前通讯录中的记录数
charmenu();//选单
voidload();//读入
voidlist();//显示
voidapp();//添加
voidsearch();//查找
voiddele();//删除
voidsave();//保存
voidsort();//排序
//**********************************************
main()
{
charchoice;
while
(1)
{
choice=menu();
switch(choice)
{
case'1':
printf("显示通讯录中的内容。
\n");
list();break;
case'2':
printf("添加记录。
\n");
app();break;
case'3':
printf("按姓名查找。
\n");
search();break;
case'4':
printf("从通讯录中的删除内容。
\n");
dele();break;
case'5':
printf("按姓名对通讯录中的内容重新排序。
\n");
sort();break;
case'6':
printf("保存通讯录中的内容到文件。
\n");
save();break;
case'7':
printf("从文件读记录到通讯录。
\n");
load();break;
case'0':
printf("退出通讯录管理系统。
\n");
save();break;
default:
printf("输入错误!
");
}
if(choice=='0')
break;
printf("\n按任意键继续.......!
");
getchar();
}
}
//******************************************************************************
charmenu()
{
charc;
printf("\n\n\n\n王海峰的通讯录\n");
printf("*************************************************************\n");
printf("*************************Menu********************************\n");
printf("**1显示通讯录中的内容**\n");
printf("**2添加记录**\n");
printf("**3按姓名查找**\n");
printf("**4从通讯录中的删除内容**\n");
printf("**5按姓名对通讯录中的内容重新排序**\n");
printf("**6保存通讯录中的内容到文件**\n");
printf("**7从文件读记录到通讯录**\n");
printf("**0退出通讯录管理系统**\n");
printf("*************************************************************\n");
printf("*********************请选择服务0--7**************************\n");
c=getchar();
getchar();
returnc;
}
//*******************************************************************************
voidload()//从文件度记录到通讯录中
{
FILE*fp;
if((fp=fopen("e:
/txl.txt","rb"))==NULL)
{
printf("Cannotopenfile");
exit(0);
}
list();
for(i=0;iif(fwrite(&rec[i],sizeof(structrecord),1,fp)!
=1)
printf("Filewreteerror!
\n");
fclose(fp);
}
//*******************************************************************************
voidlist()//显示通讯录中的内容
{
for(i=0;i{
if(rec[i].name[0])
{
printf("%3d%-8s%2d",rec[i].num,rec[i].name,rec[i].age);
printf("%-12s%-20s",rec[i].tel,rec[i].email);
printf("%-20s%-6s\n",rec[i].addr,rec[i].zip);
}
}
}
//*********************************************************************************
voidapp()//添加记录
{
charan;
puts("当前通讯录中的内容:
\n");
list();
printf("当前通讯录中有%d条记录。
\n",m);
do
{
rec[m].num=m+1;
printf("姓名:
");gets(rec[m].name);
printf("年龄:
");scanf("%d",&rec[m].age);getchar();
printf("电话:
");gets(rec[m].tel);
printf("email:
");gets(rec[m].email);
printf("地址:
");gets(rec[m].addr);
printf("邮编:
");gets(rec[m].zip);
puts("新输入的记录为:
");
printf("%3d%-8s%2d",rec[m].num,rec[m].name,rec[m].age);
printf("%-12s%-20s",rec[m].tel,rec[m].email);
printf("%-20s%-6s\n",rec[m].addr,rec[m].zip);
m++;
puts("继续输入吗?
(Y/N)");
an=toupper(getchar());getchar();
}while(an=='Y');
}
//********************************************************************
voidsearch()//按姓名查找
{
charxm[9];
printf("请输入查找的姓名:
");
gets(xm);
for(i=0;i{
if(strcmp(xm,rec[i].name)==0)
{
printf("%3d%-8s%2d",rec[i].num,rec[i].name,rec[i].age);
printf("%-12s%-20s",rec[i].tel,rec[i].email);
printf("%-20s%-6s\n",rec[i].addr,rec[i].zip);
break;
}
}
}
//*********************************************************************
voiddele()//删除记录
{
intsc;
list();
printf("当前通讯录中有%d条记录。
\n",m);
do
{
printf("删除几号记录:
");
scanf("%d",&sc);
}while(sc>m&&sc>0);
if(sc!
=m-1)
for(i=sc;i{
rec[i-1]=rec[i];
rec[i-1].num=i;
}
m--;
list();
}
//*********************************************************************
voidsave()//保存通讯录中的内容到文件
{
FILE*fp;
if((fp=fopen("txl.txt","wb"))==NULL)
{
printf("Cannotopenfile");
exit(0);
}
list();
for(i=0;iif(fwrite(&rec[i],sizeof(structrecord),1,fp)!
=1)
printf("Filewreteerror!
\n");
fclose(fp);
}
//*************************************************************
voidsort()//按姓名对通讯录中的内容重新排序
{
intj,k;
structrecordt;
list();
for(i=0;i{
k=i;
for(j=i;jif(strcmp(rec[k].name,rec[j].name)>0)
k=j;
if(k!
=i)
{
t=rec[k];
rec[k]=rec[i];
rec[i]=t;
}
for(i=0;irec[i].num=i+1;
}
puts("\n排序已完成!
");
list();
}
1.测试内容和结果表+运行效果抓图
1、首面
2、添加记录
3、按姓名查找
4、显示通讯录内容
5、从通讯录中删除内容
6、按姓名对通讯录内容重新排序
7、退出系统
七、总结
1.项目评价
本程序在原有的代码基础上进行修改,使之更加简明、易操作,提高了代码的实际用途,使其更加人性化,主界面更加简洁明了,便于人机沟通。
并且耗时较短,对设备和人力的要求较低,开发成本最大程度上得到了控制。
2.不足之处(调试过程中的主要问题及解决方法)
1、读取文件信息到通讯录时,经常性读取错误,前期均是读不出来进几次调试后方发觉原来是将“rb”错编写为“wb”。
2、在执行完一个操作服务后,立即选择另一个操作服务时常输出“输入错误”警告语。
3、程序运用的字符较杂乱。
3.心得体会
通过这次课程设计,我认识到了很多的事情。
首先编码不是想象的那么简单的,它很是考验人的耐心,心浮气躁的很容易犯一些小错误:
如:
for(“i=0;i这些都是不该犯的错误的。
其次在编写大程序是也是有技巧的,分块、分函数进行都可以,这样便可以使程序更简明、好做。
最后程序的测试也使十分重要的,它不仅帮我们检查出了程序的错误所在,也在同时告诫了我们编程的基本思想与素质。
我对C语言有了更深刻的了解,增强了程序的编写能力,巩固了专业知识,对程序的模块化观念也由模糊逐渐变的清晰了。
在程序的运行与调试过程中出现了很多错误,通过反复地复习课本上的相关知识,不停地修改与调试,我终于完成了这段程序。
在调试过程中,我认识到了C语言的灵活性与严谨性,同一个功能可以由不同的语句来实现,但编写程序时要特别注意细节方面的问题,因为一个小小的疏忽就能导致整个程序不能运行。
当然我也认识到了自己的薄弱之处,如文件运用的不熟练,在以后的学习中我要集中精力、端正态度,争取把知识学得更扎实、更全面。