通讯录管理
——数据结构课程设计报告
学生姓名 |
幸广辉 |
学生班级 |
信管1134班 |
学生学号 |
201311671422 |
完成时间:2015年1月8日
目录
1、需求分析
1.1课程设计目的
1.2课程设计要求
2、分析
2.1功能模块
2.2概要设计
4、测试
5、收获与体会
附录:源程序
1.1课程设计目的
通过课程设计,学会运用数据结构知识,针对具体应用,自己设计合理数据结构,确定存储结构,并能设计具体操作算法,选择使用具体语言进行实现。掌握C++较复杂程序的组织和设计过程,调试技巧。学习解决实际问题的能力。
1.2课程设计要求
用数据结构的双链表制作一款通讯管理软件,初步要求:
每个好友信息包含姓名、性别、住址、邮编、年龄、电话、QQ、微信帐号、生日等。
‚作为一个完整的系统,应具有友好的界面和较强的容错能力。
2.1主要功能
1进入主功能菜单界面,功能选择。
2创建联系人列表并保存修改后的通讯录
3删除创建的联系人并保存修改后的通讯录
4打印出保存后的通讯录当未创建通讯录时提示用户创建新的通讯录
5根据用户输入的联系人的首字母查找符合条件的联系人
6退出通讯录管理系统
3概要设计
主要流程图如下:
‚根据系统的功能模块
1.主界面模块:完成系统菜单的显示
2.功能选择模块:根据用户的选择,完成其相应的功能
(1)通讯录联系人的信息录入:完成用户从界面输入联系人的信息,保存入系统的功能。
(2)通讯录信息删除:删除所存储的联系人信息。
(3)通讯录信息查询:完成用户从界面输入查找的条件
(4)通讯录信息输出:在屏幕上输出所有联系人的信息。
4测试
1菜单界面
2功能测试
①录入模块
②删除模块
③查询模块
④打印模块
5心得与体会
这次的课程设计感触颇深,首先深刻感受到程序的实际应用性,这学期的课程设计的题目都是贴近实际生活的问题,我们就能够很清楚的明白自己写的程序要解决什么样的实际问题,应该解决什么样的实际问题,觉得自己的程序更有实用价值。
这次设计中不断的出现问题,我则自己努力,不断的改正错误,改进自己的程序,有些自己实在是无法解决的问题,则会与其他同学讨论,或上网查询、搜寻资料……在不断的改进过程中,深刻的认识到自己程序的漏洞和不健全性,认识到自己对双链表略懂皮毛。以致有很多很简单的错误调试了很长时间。通过这次设计,不但让我进一步加深了对知识的巩固,而且很好的锻炼了我的独立思考能力,以及分析问题解决问题的能力。今后凡事都不要着急,要冷静的分析思考,越是急越是无法解决,只有沉着冷静深入思考才能真正的解决问题,只要自己努力凡事都能解决。还有就是深刻体会到了平时多练习的重要性,平时如果不多练习,在编写自己的程序时会手忙脚乱无所适从。
代码
源程序
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <string.h>
typedef struct message
{
char name[30];//定义变量的字符型
char sex[4];
char sage[10];
char number[20];
char email[30];
char adress[100];
char qq[120];
char weixin[120];
char birthday[10];
struct message *proir; //结构体
struct message *next;
} mess;
mess *head=NULL;
mess *p[100];
int man=0;
//
//函数
char menu(); //菜单
void add(); //增加
void del(); //删除
char del_menu();
void del_name();
void del_adress();
void del_number();
void del_email();
void del_qq();
void del_sex();
void del_sage();
void del_weixin();
void del_birthday();
void find(); //查找
char find_menu();
void find_name();
void find_adress();
void find_number();
void find_email();
void find_qq();
void find_sex();
void find_sage();
void find_weixin();
void find_birthday();
void print(); //打印
char print_menu();
void print_time();
void print_word();
void file_save();
//主函数
int main()
{
FILE *fp=fopen("1.txt","r+");
if(fp==NULL)
cout<<"通讯录为空!!\n";
else
{
fseek(fp,0,2);
if(ftell(fp)==0)
cout<<"通讯录为空!\n";
else
{
mess *p2,*tmp;
rewind(fp);
head=(mess *)malloc(sizeof(mess));
head->next=NULL;
p[0]=head;
while(feof(fp)==0)
{
p2=(mess *)malloc(sizeof(mess));
cout<<"%s\t%s\t%s\t%s\t%s\n",p2->name,p2->adress,p2->number,p2->email,p2->qq,p2->sex,p2->sage,p2->weixin,p2->birthday;
tmp=head;
while(tmp->next!=NULL)
tmp=tmp->next;
tmp->next=p2;
p2->next=NULL;
p2->proir=tmp;
man++;
p[man]=p2;
p[man+1]=NULL;
}
man--;
p2->proir->next=NULL;
cout<<"数据读取完毕!\n";
int flag=fclose(fp);
if(flag!=0)
{cout<<"关闭文件失败!";
return 0;}
}
}
char i;
i=menu();
switch(i)
{
case '1':add();break;
case '2':del();break;
case '3':find();break;
case '4':print();break;
case '5':file_save();breake;
case '6':return 0;
}
}
主菜单
char menu()
{
char i;
cout<<"---------------功能菜单---------------\n"<<endl;
cout<<" | 1.录入信息\t 2.删除信息 |\n"<<endl;
cout<<" | 3.查找信息\t 4.显示信息 |\n"<<endl;