同学录 课程设计
《数据结构与算法设计》课
程设计报告
题目:同学录
学生姓名:费文辉
学号:201220181131
班级:1221811
指导教师:邹国华
2014年1 月9 日
目录
一背景与目的--------------------------------------------3
二需求分析----------------------------------------------3
三总体设计----------------------------------------------3
3.1 主要函数的实现------------------------------------3
3.2 同学录管理系统图示--------------------------------4
四详细设计与程序测试------------------------------------4
五实现部分----------------------------------------------11
六总结与设计心得----------------------------------------18
七参考文献----------------------------------------------18错误!未定义书签。
一、背景与目的
随着计算机的普及,人们的生活摆脱了传统式的记事本、电话簿,越来越多的靠计算机来帮助人们记住这些事情,极其简便。这就需要有一个使用的同学录管理系统,
电子同学录在科技发展的现代是非常重要的,它具有轻便,快捷且不占存储空间的优点,有效的解决了纸质同学占用空间,不方便查找且容易丢失的问题。特别是当同学录的信息量很大的时候,这个系统就更显得尤为重要了。
二、需求分析
经过本次的课程设计,我觉得通讯录要实现的基本功能如下:
1.对同学基本信息进行录入:同学信息包括同学姓名、性别、年龄、身份证号、联系电话、qq号码、爱好、联系地址、邮箱等九大方面;
2.对同学信息进行查询:可按同学姓名、地址、年龄等多种方式进行查询;
3.对同学信息进行排序:可按同学姓名、年龄、地址、qq号等多种方式排序;
4.对同学信息进行修改:当你发现前面录入的信息出现错误时,可以对其进行修改,且可以对其九个方面分别进行修改。
5.对同学信息进行删除:当你不需要某个联系人的信息时,可以直接将该人的信息删除。
6.可以对同学的信息进行展示:展示同学录中的所有录入的信息。
三、总体设计
3.1 主要函数的定义
LinkList Creat ( ) 创建空单链表函数 void Insert(LinkList H) 录入同学信息函数。
void Locate (LinkList H) 查询同学信息函数(可按同学姓名、年龄、地址等多种方式查询)
void Updata (LinkList H) 修改同学信息函数(可以分别修改九个方面的信息) void Sort (LinkList H) 排序信息函数(可按同学姓名、年龄、地址、qq 号等多种方式排序)
void Delete (LinkList H) 删除同学信息函数 void print (LinkList H) 展示同学信息函数 void main( ) 主函数调用
3.2 同学录管理系统图示
同学录
删除查询录入展示修改排序
图 同学录管理功能图
四、详细设计与程序测试
1)运行程序,看到主菜单。有六个选项: 0 退出; 1录入同学信息; 2查询同学信息; 3删除同学信息; 4展示同学信息; 5修改同学信息; 6 排序同学信息;
按姓名
按地址
按年龄
按姓名
按年龄
按地址
按QQ
图通讯录主界面
2)按1录入学生信息:接着提示,输入联系人的姓名,年龄,性别,联系电话,QQ号码,身份证号,爱好,联系地址,邮箱等。输入一个之后会自动显示下一个联系人的输入,添加完后会自动返回主菜单。
图录入同学信息
3)按2为查询同学信息:可以选择通过同学的姓名,年龄,地址查找。查找成功后直接输出相关同学的信息,然后返回主菜单。
图选择查询方式
图选择按姓名查询
图选择按联系地址查询
图选择按年龄查询
4)按3为删除同学信息:先按姓名将要删除的信息查找出来。然后可以选择按姓名,联系电话,qq号码进行删除,删除成功后会提示删除成功并
且自动返回主菜单。
图选择删除方式
图删除同学信息
5)按4为展示所有同学的信息:可以将同学录中所有的同学信息都输出来,成功之后,自动返回主菜单。
图展示所有同学的信息
6)按5为修改同学的信息:先按姓名将你要修改的同学信息输出来,然后选择要修改的信息,可以分别修改姓名,年龄,性别,联系电话,qq号,身份证号,爱好,联系地址,邮箱等9大方面,每修改一次则会显示修改后的信息,与修前相对比。操作完则会自动返回主菜单。
图修改前的信息
图选择要修改的信息
图修改后的信息
7)按6为排序同学信息:可以通过同学的姓名,年龄,地址,qq号码等四种方式进行排序,选择排序方式后会自动进行排序方式并在界面上显示出来。操
作完成后自动返回主菜单。
图排序同学信息
8)按0为退出该程序。选择之后会出现Press any key to continue,然后按任意键就可以直接退出该程序。
图退出程序
不足:排序算法还不够完善,一些错误的处理机制仍需代码完善。
五、实现部分
定义同学结构体:
typedef char LElemType;
typedef struct Node
{ LElemType data;
Node *next; //存放后继元素的地址
char name[20]; //同学姓名
char age[30]; //年龄
char sex[4]; //性别
char tel[20]; //电话号码
char qq[13]; //qq号码
char no[25]; //身份证号
char hobby[40];//爱好
char address[100]; //联系地址
char email[20]; //邮箱
}LNode,*LinkList;
创建空单链表:
LinkList Creat()
{LinkList H;
H=new LNode;
if(H) //若创建头结点成功,把单链表置为空表{H->next=NULL;}
return H;
}
录入同学基本信息:
void Insert(LinkList H)
{
LinkList p;
p=new LNode;
if(!p)
{cout<<"*程序错误,不能插入同学基本信息!*"< cout<<"同学姓名:"< cin>>p->name; cout<<"年龄:"< cin>>p->age; cout<<"性别:"< cin>>p->sex; cout<<"联系电话:"< cin>>p->tel; cout<<"QQ号码:"< cin>>p->qq; cout<<"身份证号:"< cin>>p->no; cout<<"爱好:"< cin>>p->hobby; cout<<"联系地址:"< cin>>p->address; cout<<"邮箱:"< cin>>p->email; p->next=H->next; H->next=p; cout<<"同学基本信息插入成功.."< } 查询同学信息: void Locate(LinkList H) { int x; LinkList p; p=H->next; cout<<" *******请输入你想要的信息查询方式******"< cout<<" <<< 1、通过姓名查询>>> "< cout<<" <<< 2、通过联系地址查询>>> "< cout<<" <<< 3、通过年龄查询>>> "< cin>>x; char str[30]; if(x==1) //按姓名查询同学信息 { cout<<"请输入你要查询的联系人的姓名:"; cin>>str; while( p && strcmp(p->name,str)!=0) {p=p->next;} } if(x==2) //按联系地址查询同学信息 { cout<<"请输入你要查询的同学的联系地址:"; cin>>str; while(p && strcmp(p->address,str)!=0) {p=p->next;} } if(x==3) //按年龄查询同学信息 { cout<<"请输入你要查询的同学的年龄:"; cin>>str; while(p && strcmp(p->age,str)!=0) {p=p->next;} } if(p==NULL) {cout<<"查询为空,请重新查询或选择录入该同学信息!"< { cout<<"你要查询的同学的基本信息为:"< cout<<"姓名:"< cout<<"年龄:"< cout<<"性别:"< cout<<"联系电话:"< cout<<"Q Q号码: "< cout<<"身份证号:"< cout<<"爱好:"< cout<<"联系地址: "< cout<<"邮箱:"< } } 修改同学信息: void Updata(LinkList H) { LinkList p; p=H->next; char str[20]; int a; cout<<"请输入你想要修改信息的同学姓名:"; cin>>str; while( p && strcmp(p->name,str)!=0) {p=p->next;} if(strcmp(p->name,str)==0) { cout<<"修改前的同学信息为:"< cout<<"姓名:"< cout<<"年龄:"< cout<<"性别:"< cout<<"联系电话:"< cout<<"Q Q号码: "< cout<<"身份证号:"< cout<<"爱好:"< cout<<"联系地址: "< cout<<"邮箱:"< } else {cout<<"查询为空,请重新查询"< do { cout<<"*************请选择你想要修改的信息*****"< cout<<" 0、退出"< cout<<" 1、修改姓名"< cout<<" 2、修改年龄"< cout<<" 3、修改性别"< cout<<" 4、修改联系电话"< cout<<" 5、修改qq号码"< cout<<" 6、修改身份证号"< cout<<" 7、修改爱好"< cout<<" 8、修改联系地址"< cout<<" 9、修改邮箱"< cout<<"请选择相应的操作:"< cin>>a; switch(a) {case 0:break; case 1:cout<<"请输入新的姓名"< cin>>str; strcpy(p->name,str); break; case 2:cout<<"请输入新的年龄"< cin>>str; strcpy(p->age,str); break; case 3:cout<<"请输入新的性别"< cin>>str; strcpy(p->sex,str); break; case 4:cout<<"请输入新的联系电话"< cin>>str; strcpy(p->tel,str); break; case 5: cout<<"请输入新的qq号码"< cin>>str; strcpy(p->qq,str); break; case 6: cout<<"请输入新的身份证号"< cin>>str; strcpy(p->no,str); break; case 7: cout<<"请输入新的爱好"< cin>>str; strcpy(p->hobby,str); break; case 8: cout<<"请输入新的联系地址"< cin>>str; strcpy(p->address,str); break; case 9: cout<<"请输入新的邮箱"< cin>>str; strcpy(p->email,str); break; } cout<<" **********修改后的同学基本信息为************"< cout<<" 姓名:"< cout<<" 年龄:"< cout<<" 性别:"< cout<<" 联系电话:"< cout<<" Q Q号码: "< cout<<" 身份证号:"< cout<<" 爱好:"< cout<<" 联系地址: "< cout<<" 邮箱:"< cout<<"操作完毕,请再次选择相应操作:"< } while(a!=0); } 排序同学信息: void Sort(LinkList H) { LElemType e; LinkList p; int x; p=H->next; cout<<" *************请输入你想要的排序方式********** "< cout<<" <<< 1、通过姓名排序>>> "< if(x=1) //按姓名进行排序 {while(p->next) { if (strcmp(p->name,p->next->name)>0) { e=p->data; p->data=p->next->data; p->next->data=e; cout<<"排序后的同学信息为:"< cout< cout<<"姓名:"< cout<<"年龄:"< cout<<"性别:"< cout<<"联系电话:"< cout<<"Q Q号码: "< cout<<"身份证号:"< cout<<"爱好:"< cout<<"联系地址: "< cout<<"邮箱:"< p=p->next; } } } if(x=2) //按年龄进行排序{while(p->next) {if (strcmp(p->age,p->next->age)>0) { e=p->data; p->data=p->next->data; p->next->data=e; cout<<"排序后的同学信息为:"< cout< cout<<"年龄:"< cout<<"姓名:"< cout<<"性别:"< cout<<"联系电话:"< cout<<"Q Q号码: "< cout<<"身份证号:"< cout<<"爱好:"< cout<<"联系地址: "< cout<<"邮箱:"< p=p->next; } } } if(x=3) //按联系地址进行排序{while(p->next) {if (strcmp(p->address,p->next->address)>0) { e=p->data; p->data=p->next->data; p->next->data=e; cout<<"排序后的同学信息为:"< cout< cout<<"联系地址: "< cout<<"姓名:"< cout<<"年龄:"< cout<<"性别:"< cout<<"联系电话:"< cout<<"Q Q号码: "< cout<<"身份证号:"< cout<<"爱好:"< cout<<"邮箱:"<