课程设计
来源:互联网 发布:为什么做seo 编辑:程序博客网 时间:2024/05/22 12:24
通讯录管理
——数据结构课程设计报告
学生姓名
幸广辉
学生班级
信管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;
cout<<" | 5.保存并退出 6.退出 \t |\n"<<endl;
cout<<"--------------------------------------\n"<<endl;
while(1)
{
cout<<"请输入功能编号:";
cin>>i;
if('0'<i&&i<'7')
return i;
else
cout<<"无效指令!";
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////录入函数
void add()
{
mess *p1;
p1=(mess *)malloc(sizeof(mess));
cout<<"请输入姓名:\n";
cin>>p1->name;
cout<<"请输入性别:\n";
cin>>p1->sex;
cout<<"请输入年龄:\n";
cin>>p1->sage;
cout<<"请输入地址:\n";
cin>>p1->adress;
cout<<"请输入手机号码:\n";
cin>>p1->number;
cout<<"请输入邮箱:\n";
cin>>p1->email;
cout<<"请输入qq号码:\n";
cin>>p1->qq;
cout<<"请输入微信号码:\n";
cin>>p1->weixin;
cout<<"请输入生日:\n";
cin>>p1->birthday;
if(head==NULL)
{
head=(mess *)malloc(sizeof(mess));
head->next=p1;
p1->next=NULL;
p1->proir=head;
p[0]=head;
man++;
p[man]=p1;
p[man+1]=NULL;
}
else
{
mess *p2=head->next;
while(p2->next!=NULL)
p2=p2->next;
p2->next=p1;
p1->next=NULL;
p1->proir=p2;
man++;
p[man]=p1;
p[man+1]=NULL;
}
cout<<"添加成功!通讯录内现有%d个联系人\n是否继续录入信息<y/n>........",man;
char ch;
cin>>ch;
if(ch=='n');
else if(ch=='y') add();
else {cout<<"无效指令!请重新输入:";}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////删除函数
void del()
{
char i=del_menu();
switch(i)
{
case '1':del_name();break;
case '2':del_sex();break;
case '3':del_sage();break;
case '4':del_adress();break;
case '5':del_number();break;
case '6':del_email();break;
case '7':del_qq();break;
case '8':del_weixin();break;
case '9':del_birthday();break;
case '10':break;
}
}
////////////////////
char del_menu()
{
char i;
cout<<"---------------删除菜单---------------\n"<<endl;
cout<<" | 1.按姓名删除\n | 2.按微信号删除 \n"<<endl;
cout<<" | 3.按手机号码删除\n | 4.按邮箱删除 \n"<<endl;
cout<<" | 5.按qq号删除 \n | 6.返回主菜单\n"<<endl;
cout<<"--------------------------------------\n"<<endl;
while(1)
{
cout<<"请输入功能编号:";
cin>>i;
if('0'<i&&i<'7')
return i;
else
cout<<"无效指令!";
}
}
///////////////////
void del_sex(){};
void del_sage(){};
void del_adress(){};
void del_birthday(){};
void del_name()
{
if(man==0)
cout<<"通讯录为空!\n\n";
else
{
char ch[30];
int i=1;
mess *p1=head->next;
cout<<"请输入被删用户的姓名:\n";
cin>>ch;
while(p1!=NULL)
{
if(strcmp(p1->name,ch)==0)
{
while(p[i]!=p1)
i++;
while(p[i]!=NULL)
{p[i]=p[i+1];i++;}
p1->proir->next=p1->next;
if(p1->next!=NULL)
p1->next->proir=p1->proir;
cout<<"此用户信息已删除!";
cout<<"是否继续删除<y/n>........";
man--;
char tmp;
cin>>tmp;
if(tmp=='n')break;
else if(tmp=='y') {del();break;}
else {cout<<"无效指令!请重新输入:";}
}
p1=p1->next;
}
if(p1==NULL)
{
cout<<"查无此人!\n";
cout<<"是否继续删除<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n');
else if(tmp=='y') del();
else {cout<<"无效指令!请重新输入:";
}
}
}}
/////////////////////
void del_weixin()
{
if(man==0)
cout<<"通讯录为空!\n\n";
else
{
char ch[30];
int i=1;
mess *p1=head->next;
cout<<"请输入被删用户的微信号:\n";
cin>>ch;
while(p1!=NULL)
{
if(strcmp(p1->weixin,ch)==0)
{
while(p[i]!=p1)
i++;
while(p[i]!=NULL)
{p[i]=p[i+1];i++;}
p1->proir->next=p1->next;
if(p1->next!=NULL)
p1->next->proir=p1->proir;
cout<<"此用户信息已删除!";
cout<<"是否继续删除<y/n>........";
man--;
char tmp;
cin>>tmp;
if(tmp=='n')break;
else if(tmp=='y') {del();break;}
else {cout<<"无效指令!请重新输入:";}
}
p1=p1->next;
}
if(p1==NULL)
{
cout<<"查无此人!\n";
cout<<"是否继续删除<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n');
else if(tmp=='y') del();
else {cout<<"无效指令!请重新输入:";
}
}
}}
/////////////////////////////
void del_number()
{
if(man==0)
cout<<"通讯录为空!\n\n";
else
{
char ch[30];
int i=1;
mess *p1=head->next;
cout<<"请输入被删用户的电话号码:\n";
cin>>ch;
while(p1!=NULL)
{
if(strcmp(p1->number,ch)==0)
{
while(p[i]!=p1)
i++;
while(p[i]!=NULL)
{p[i]=p[i+1];i++;}
p1->proir->next=p1->next;
if(p1->next!=NULL)
p1->next->proir=p1->proir;
cout<<"此用户信息已删除!";
cout<<"是否继续删除<y/n>........";
man--;
char tmp;
cin>>tmp;
if(tmp=='n')break;
else if(tmp=='y') {del();break;}
else {cout<<"无效指令!请重新输入:";}
}
p1=p1->next;
}
if(p1==NULL)
{
cout<<"查无此人!\n";
cout<<"是否继续删除<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n');
else if(tmp=='y') del();
else {cout<<"无效指令!请重新输入:";
}
}
}}
/////////////////////
void del_email()
{
if(man==0)
cout<<"通讯录为空!\n\n";
else
{
char ch[30];
int i=1;
mess *p1=head->next;
cout<<"请输入被删用户的邮箱:\n";
cin>>ch;
while(p1!=NULL)
{
if(strcmp(p1->email,ch)==0)
{
while(p[i]!=p1)
i++;
while(p[i]!=NULL)
{p[i]=p[i+1];i++;}
p1->proir->next=p1->next;
if(p1->next!=NULL)
p1->next->proir=p1->proir;
cout<<"此用户信息已删除!";
cout<<"是否继续删除<y/n>........";
man--;
char tmp;
cin>>tmp;
if(tmp=='n')break;
else if(tmp=='y') {del();break;}
else {cout<<"无效指令!请重新输入:";}
}
p1=p1->next;
}
if(p1==NULL)
{
cout<<"查无此人!\n";
cout<<"是否继续删除<y/n>........";
char tmp;
cin>>&tmp;
if(tmp=='n');
else if(tmp=='y') del();
else {cout<<"无效指令!请重新输入:";
}
}
}}
/////////////////////
void del_qq()
{
if(man==0)
cout<<"通讯录为空!\n\n";
else
{
char ch[30];
int i=1;
mess *p1=head->next;
cout<<"请输入被删用户的qq:\n";
cin>>ch;
while(p1!=NULL)
{
if(strcmp(p1->qq,ch)==0)
{
while(p[i]!=p1)
i++;
while(p[i]!=NULL)
{p[i]=p[i+1];i++;}
p1->proir->next=p1->next;
if(p1->next!=NULL)
p1->next->proir=p1->proir;
cout<<"此用户信息已删除!";
cout<<"是否继续删除<y/n>........";
man--;
char tmp;
cin>>tmp;
if(tmp=='n')break;
else if(tmp=='y') {del();break;}
else {cout<<"无效指令!请重新输入:";}
}
p1=p1->next;
}
if(p1==NULL)
{
cout<<"查无此人!\n";
cout<<"是否继续删除<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n');
else if(tmp=='y') del();
else {cout<<"无效指令!请重新输入:";
}
}
}}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////查找函数
void find()
{
char i=find_menu();
switch(i)
{
case '1':find_name();break;
case '2':find_sex();break;
case '3':find_sage();break;
case '4':find_adress();break;
case '5':find_number();break;
case '6':find_email();break;
case '7':find_qq();break;
case '8':find_weixin();break;
case '9':find_birthday();break;
case '10':break;
}
}
///////////////////////////
char find_menu()
{
char i;
cout<<"---------------查找菜单---------------\n"<<endl;
cout<<" | 1.按姓名查找\n | 2.按微信号查找 \n"<<endl;
cout<<" | 3.按手机号码查找\n | 4.按邮箱查找 \n"<<endl;
cout<<" | 5.按qq号查找 \n | 6.返回主菜单\n"<<endl;
cout<<"--------------------------------------\n"<<endl;
while(1)
{
cout<<"请输入功能编号:";
cin>>&i;
if('0'<i&&i<'7')
return i;
else
cout<<"无效指令!";
}
}
///////////////////////////
void find_sex(){};
void find_sage(){};
void find_adress(){};
void find_birthday(){};
void find_name()
{
if(man==0)
cout<<"通讯录为空!\n\n";
else
{
char ch[30];
mess *p1=head->next;
cout<<"请输入查找用户的姓名:\n";
cin>>ch;
while(p1!=NULL)
{
if(strcmp(p1->name,ch)==0)
{
cout<<"姓名\t性别\t年龄\t地址\t手机\t邮箱\tqq\t微信\t生日\n";
cout<<"%s\t%s\t%s\t%s\t%s\n",p1->name,p1->sex,p1->sage,p1->adress,p1->number,p1->email,p1->qq,p1->weixin,p1->birthday;
cout<<"是否继续查找<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n')break;
else if(tmp=='y') {find();break;}
else {cout<<"无效指令!请重新输入:";}
}
p1=p1->next;
}
if(p1==NULL)
{
cout<<"查无此人!\n";
cout<<"是否继续查找<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n');
else if(tmp=='y') del();
else {cout<<"无效指令!请重新输入:";
}
}
}}
void find_weixin()
{
if(man==0)
cout<<"通讯录为空!\n\n";
else
{
char ch[30];
mess *p1=head->next;
cout<<"请输入查找用户的地址:\n";
cin>>ch;
while(p1!=NULL)
{
if(strcmp(p1->weixin,ch)==0)
{
cout<<"姓名\t性别\t年龄\t地址\t手机\t邮箱\tqq\t微信\t生日\n";
cout<<"%s\t%s\t%s\t%s\t%s\n",p1->name,p1->sex,p1->sage,p1->adress,p1->number,p1->email,p1->qq,p1->weixin,p1->birthday;
cout<<"是否继续查找<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n')break;
else if(tmp=='y') {find();break;}
else {cout<<"无效指令!请重新输入:";}
}
p1=p1->next;
}
if(p1==NULL)
{
cout<<"查无此人!\n";
cout<<"是否继续查找<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n');
else if(tmp=='y') del();
else {cout<<"无效指令!请重新输入:";
}
}
}}
void find_number()
{
if(man==0)
cout<<"通讯录为空!\n\n";
else
{
char ch[30];
mess *p1=head->next;
cout<<"请输入查找用户的手机号码:\n";
cin>>ch;
while(p1!=NULL)
{
if(strcmp(p1->number,ch)==0)
{
cout<<"姓名\t性别\t年龄\t地址\t手机\t邮箱\tqq\t微信\t生日\n";
cout<<"%s\t%s\t%s\t%s\t%s\n",p1->name,p1->sex,p1->sage,p1->adress,p1->number,p1->email,p1->qq,p1->weixin,p1->birthday;
cout<<"是否继续查找<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n')break;
else if(tmp=='y') {find();break;}
else {cout<<"无效指令!请重新输入:";}
}
p1=p1->next;
}
if(p1==NULL)
{
cout<<"查无此人!\n";
cout<<"是否继续查找<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n');
else if(tmp=='y') del();
else {cout<<"无效指令!请重新输入:";
}
}
}}
void find_email()
{
if(man==0)
cout<<"通讯录为空!\n\n";
else
{
char ch[30];
mess *p1=head->next;
cout<<"请输入查找用户的邮箱:\n";
cin>>ch;
while(p1!=NULL)
{
if(strcmp(p1->email,ch)==0)
{
cout<<"姓名\t性别\t年龄\t地址\t手机\t邮箱\tqq\t微信\t生日\n";
cout<<"%s\t%s\t%s\t%s\t%s\n",p1->name,p1->sex,p1->sage,p1->adress,p1->number,p1->email,p1->qq,p1->weixin,p1->birthday;
cout<<"是否继续查找<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n')break;
else if(tmp=='y') {find();break;}
else {cout<<"无效指令!请重新输入:";}
}
p1=p1->next;
}
if(p1==NULL)
{
cout<<"查无此人!\n";
cout<<"是否继续查找<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n');
else if(tmp=='y') del();
else {cout<<"无效指令!请重新输入:";
}
}
}}
void find_qq()
{
if(man==0)
cout<<"通讯录为空!\n\n";
else
{
char ch[30];
mess *p1=head->next;
cout<<"请输入查找用户的qq:\n";
cin>>ch;
while(p1!=NULL)
{
if(strcmp(p1->qq,ch)==0)
{
cout<<"姓名\t性别\t年龄\t地址\t手机\t邮箱\tqq\t微信\t生日\n";
cout<<"%s\t%s\t%s\t%s\t%s\n",p1->name,p1->sex,p1->sage,p1->adress,p1->number,p1->email,p1->qq,p1->weixin,p1->birthday;
cout<<"是否继续查找<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n')break;
else if(tmp=='y') {find();break;}
else {cout<<"无效指令!请重新输入:";}
}
p1=p1->next;
}
if(p1==NULL)
{
cout<<"查无此人!\n";
cout<<"是否继续查找<y/n>........";
char tmp;
cin>>tmp;
if(tmp=='n');
else if(tmp=='y') del();
else {cout<<"无效指令!请重新输入:";
}
}
}}
///////////////////////////////////////////////////////////////////////////////////////////////////////////显示函数
void print()
{
char c;
c=print_menu();
switch(c)
{
case '1':print_time();break;
case '2':print_word();break;
}
}
//////////////
char print_menu()
{
char c;
cout<<"---------------显示菜单---------------\n"<<endl;
cout<<" | 1.按时间先后排序\n | 2.按首字母排序 \n"<<endl;
cout<<"--------------------------------------\n"<<endl;
while(1)
{
cout<<"请输入功能编号:";
cin>>c;
if('0'<c&&c<'3')
return c;
else
cout<<"无效指令!";
}
}
///////////////
void print_time()
{
if(man==0)
cout<<"通讯录为空!\n";
else
{
cout<<"姓名\t性别\t年龄\t地址\t手机\t邮箱\tqq\t微信\t生日\n";
for(int i=1;i<=man;i++)
cout<<"%s\t%s\t%s\t%s\t%s\n",p[i]->name,p[i]->sex,p[i]->sage,p[i]->adress,p[i]->number,p[i]->email,p[i]->qq,p[i]->weixin,p[i]->birthday;
}
}
//////////////
void print_word()
{
if(man==0)
cout<<"通讯录为空!\n";
else if(man==1)
{
mess *p=head->next;
cout<<"姓名\t性别\t年龄\t地址\t手机\t邮箱\tqq\t微信\t生日\n"; cout<<"%s\t%s\t%s\t%s\t%s\n",p->name,p->sex,p->sage,p->adress,p->number,p->email,p->qq,p->weixin,p->birthday;
}
else
{
mess *p1=head->next,*p2=p1->next;
for(int i=0;i<man;i++)
{
p1=head->next;p2=p1->next;
while(p2->next!=NULL)
{
if(strcmp(p1->name,p2->name)>0)
{
p1->next=p2->next;
p2->next->proir=p1;
p2->proir=p1->proir;
p1->proir->next=p2;
p1->proir=p2;
p2->next=p1;
p2=p2->next->next;
}
else
{
p1=p1->next;
p2=p2->next;
}
}
if(strcmp(p1->name,p2->name)>0)
{
p2->proir=p1->proir;
p1->proir->next=p2;
p1->next=NULL;
p2->next=p1;
p1->proir=p2;
}
}
cout<<"姓名\t性别\t年龄\t地址\t手机\t邮箱\tqq\t微信\t生日\n";
p1=head->next;
for(int j=0;j<man;j++)
{
cout<<"%s\t%s\t%s\t%s\t%s\n",p1->name,p1->sex,p1->sage,p1->adress,p1->number,p1->email,p1->qq,p1->weixin,p1->birthday; p1=p1->next;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////文件保存
void file_save()
{
FILE *fp=fopen("1.txt","w+");
if(fp==NULL)
cout<<"保存失败!\n";
else
{
//fputs("姓名\t地址\t手机\t邮箱\tqq\n",fp);
for(int i=1;i<=man;i++)
cout<<fp,"%s\t%s\t%s\t%s\t%s\n",p[i]->name,p[i]->sex,p[i]->sage,p[i]->adress,p[i]->number,p[i]->email,p[i]->qq,p[i]->weixin,p[i]->birthday;
//char ch[5]="结束";
//fcout<<fp,"%s",ch);
int j=fclose(fp);
if(j==0)
cout<<"保存成功!\n";
else
cout<<"保存失败!\n";
}
}
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 18个最热深度学习Github项目逐一介绍
- cmd后门
- Have a look at what’
- The Process Of BFS.
- 【大话设计模式】——行为型模式之“拟人化模式”
- 课程设计
- POJ 3692-Kindergarten(二分图_最小顶点集)
- pip的安装以及在安装的过程中遇到的问题及解决方法
- php图片上传之文件安全
- 求两个数的最大公约公倍数
- Android禁止锁屏
- SQLserver 删除数据库日志SQL
- 8皇后问题(递归方法实现)
- 图的基本习题集锦