c++课程设计报告通信录 .doc
课程设计说明书课程名称 C+项目设计 设计题目 学生姓名 学号 专 业 指导教师 年 月 日 目录一、系统开发相关情况1(一)开发背景1(二)系统开发的目标1二、系统以及需求分析1(一)系统目标1三、程序功能描述以及模块结构2(一)功能模块描述及主要类描述2(二)程序流程图3(三)数据结构表4四、用户使用说明与调试结果4(一)使用说明4(二)调试结果4(三)优缺点分析8五、总结8参考文献:9附录:职工信息管理系统源码(C)9随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。本文介绍了在Microsoft Visual C+ 6.0环境下开发一个通讯录的过程。本系统界面友好,操作简单,比较实用。一、系统开发相关情况(一) 开发背景随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。(二)系统开发的目标为了更好地适应我校的要求,进一步提供全方位的信息服务通讯录在实施后应该能够达到以下的目标: 能够准确地记录职工的相关信息。 系统界面友好、操作简单易行,查询灵活方便,数据储存安全可靠。 系统维护安全、方便、可靠,并且能够实现实用性,先进性的要求。二、系统以及需求分析(一)系统目标除了前面所述,我们所开发的系统还应该具有以下功能: 原始数据修改简单方便; 方便的数据查询; 删除数据方便简单,稳定性好; 数据计算自动完成,尽量减少人工干预;三、程序功能描述以及模块结构(一)功能模块描述及主要类描述 模块一:增加人员函数Add();增加通讯录基本信息。模块二:删除人员函数Delete();删除指定的学生的基本信息。模块三:修改人员函数Modify();修改指定的通讯录基本信息。模块四:查询人员信息函数Query();查询指定的学生信息。模块五:数据存盘,载入函数Save()以及Load();储存与载入基本信息。模块六:预览数据void Look();预览比较详细的信息。模块七:删除通讯录void DesTory();删除已载入的所有的信息。模块八:基础数据设置函数void TJ();;统计男女的人数,以及总人数。本通讯录采用了面向对象的程序设计方法。所有的方法均以类为基础。所涉及到的类包括:class Person 基本员工类;该类是一个基类,设置了属于保护类的职工基本属性,以及构造函数Person(char ID,char *Name,int Duty)。可以给职工类型继承。Class Manage 管理类;该类定义了管理函数,即前文所述八个模块功能的实现方法,链表的使用也包括其中。此类的作能在于将所有功能模块集成并定义本系统使用的主要方法。(二)程序流程图开始定义变量数据处理调用输出函数YN输入C的值C>=1&&C<=8调用保存函数调用预览函数调用清除函数调用查询函数调用输出函数调用修改函数调用删除函数调用新增函数调用统计函数退出系统图 3-1 程序流程图(三)数据结构表序号成员名数据类型长度字段含义1Nostring学号2Namechar20名字3Sexchar10性别4Telstring20联系方式5Agestring年龄表3-1 数据结构表四、用户使用说明与调试结果(一)使用说明这是一个关于职工信息管理系统,具有录入、输出、删除、查询、修改、保存、统计等功能,建立了一个含有学号、姓名、性别、联系方式等成员的类的变量class Person 。已从文本录入了范例数据。调试过程中,可按照有关提示进行相关操作:增加通讯录按“1”键;删除通讯录按“2”键;修改通讯录按“3”键;查询详细通讯录按“4”键;保存通讯录数据设置按“5”键;预览通讯录按“6”键;清除通讯录按“7”键;统计数据按“8”键。(二)调试结果代码中运用了switch 语句调用各子函数,数字 1、2、3、4、5、6、7、8等七个数字代表不同的指令。系统启动时,会自动在存放该系统的磁盘根目录之下装入一个数据文件:person.txt,调试时一个数据文件都已经写入部分数据,使用功能“6预览通讯录”,显示如下:指令“n”为退回主界面,“y”代表进入查询详细信息界面:可以按照学号、名字、电话号码查找较详细信息指令“2删除通讯录”代表调用删除人员函数Delete(),要求操作者输入职工的相关ID,系统根据操作者输出的ID,找出对应的记录,然后删除该职工的信息,如果删除的是第一个结点,则 p1->next,指向第二个结点;下图示范了删除第一个节点之后的显示结果:如果删除的是第i个(0< i <n)就把下一个结点地址赋给前一个结点地址;如果找不到对应的ID,则不会删除任何一个记录,并输出“未找到!”。指令“3修改人员”代表调用修改人员函数Modify(),体统根据操作者输入的ID找到对应的记录,将新输入的数据对应地赋给要修改的各成员。指令“5保存数据”表示调用存盘函数Save(),输入“Y”或者“N”以进一步操作。指令“8统计”,调用TJ();函数,按照男、女统计人数:指令“7清除通讯录”,调用DesTory()清除已存数据:(三)优缺点分析优点: 系统中包含了输入、输出、保存、删除、查询、修改等多种功能,系统操作灵活性较强,功能较强大; 可以随意地选择不同的指令进行操作; 排版效果清晰明了,美观; 操作简单方便。缺点: 由于该系统对数据采用文本保存方式,所以安全性不可靠。 采用链表结构操作,不能支持超大量的数据,否则运行缓慢。五、总结本次设计我们选择的题目是通讯录。因为事先的计划非常明确,所以我们在完成这个设计的过程也是比较顺利的。在系统分析和设计的部分仍然花了比较多的时间。模块设计部分因为涉及功能的实现,要从抽象的设计转化成实际的代码,因此对于某项功能的实现方法都思考得比较详尽。加上在开发系统之前,我们阅读很多与本系统有相关内容的书籍以做参考,使得此次系统编写能顺利进行。由于班里每个人都需要做一份设计,所以我们经常互相交流。在交流的时候经常能够互相提出更好的建议。经过对通讯录的分析与编写,我得到了很大的收获。自主学习的必要性更是解决问题的基础。这次设计使我重温了以前学过的各科知识,让我对C编程有了更深刻的认识。除了对系统作出正确的分析,实际的调查工作对系统的整体设计有着至关重要的作用。所以在分析系统之前,我花了一些时间在公司的实际管理工作调查上。也因为这样,如何编写代码逐渐变得明朗。每一个功能模块经过调查后后,各个功能逐渐显露出来,然后,反复探讨,验证这项功能是否有存在的必要,是否可以改进得更好。在这样的前提下,最后顺利完成了这份设计。 这次C系统设计作业,提升了我分析问题的能力和思考问题的逻辑能力,更明白实际调研的重要性。从这次设计学到的东西,相信会对我们日后的学习工作起到很大的指导作用附录:通讯录系统源码(C)#include<iostream>#include<fstream>#include<string>#include<conio.h>#include<Windows.h>/#include<windows.h>using namespace std;string ID;/具有唯一性class Personprotected: string No; /学号string Age;char Name20; /姓名char Sex10; /性别string Tel; /联系方式Person *next; public: Person(string ID,char *Name,char *Sex,string Age,string Tel) strcpy(this->Name,Name); strcpy(this->Sex,Sex);this->Tel=Tel;this->No=ID; this->Age=Age;friend class Manage;class Manageprivate:Person *person;public:Manage()person=0;Load();Manage() Person *p; p=person; while(p) p=p->next; delete person; person=p; person=0; void Find(char Name20);/按姓名查找 void Find(string ID);/按编号查找void Add(); /添加加信息 void Delete(); /删除信息 void Modify(string ID); /修改信息void Query(); /查询信息 void TJ(); /清除文件信息void Save(); /保存数据 void Load(); /读入数据void Look();/预览void DesTory();void Output(Person *p)cout<<"tt学号: "<<p->No<<endl;cout<<"tt姓名: "<<p->Name<<endl;cout<<"tt性别: "<<p->Sex<<endl;cout<<"tt年龄: "<<p->Age<<endl;cout<<"tt联系电话: "<<p->Tel<<endl;cout<<endl;void Manage:Add()system("cls");Person *p,*p2; /新结点指针 string No,Age,Tel;char Name20,Sex10; char c;cout<<"n* 新增学生通讯录 *n" /输入学生信息 cout<<"输入学号:t"cin>>No; cout<<endl;Person *p1;p1=person;while(p1) if(p1->No=No) break; else p1=p1->next; if(p1!=NULL)cout<<"该学号已存在,是否修改该学生信息(Y/N) "<<endl;cin>>c;if(toupper(c)='Y')cout<<"该学生信息为:"<<endl;Find(No);cout<<endl;Modify(No);return ;elsereturn ;cout<<"输入姓名:t"cin>>Name; cout<<endl;cout<<"输入性别:t"cin>>Sex;cout<<endl;cout<<"输入年龄:t"cin>>Age;cout<<endl;cout<<"输入联系方式:t"cin>>Tel;cout<<endl; p=new Person(No,Name,Sex,Age,Tel);p->next=0;/学生结点加入链表 if(person) /若已经存在结点 p2=person; while(p2->next) /查找尾结点 p2=p2->next; p2->next=p; /连接 else /若不存在结点(表空) person=p; /连接 system("cls");cout<<"ttt *添加成功*n"<<endl;cout<<"是否继续添加(Y/N) "<<endl;cin>>c;if(toupper(c)='Y')Add();return ;elsereturn ;void Manage:Delete() /删除人员 system("cls");char c;string No; cout<<"n* 删除信息 *n" cout<<"输入要删除的学生ID:t"cin>>No; cout<<endl;/查找要删除的结点 Person *p1,*p2;p1=person; while(p1) if(p1->No=No) break; else p2=p1; p1=p1->next; /删除结点 if(p1!=NULL)/若找到结点,则删除 cout<<"所要删除的学生的信息如下:n"<<endl;Output(p1);cout<<"确定是否删除(Y/N): "cin>>c;if(toupper(c)!='Y')return;/system("pause");if(p1=person) /若要删除的结点是第一个结点 person=p1->next; delete p1; else /若要删除的结点是后续结点 p2->next=p1->next; delete p1; cout<<"tt*删除成功*n"cout<<"是否继续删除(Y/N) "<<endl;cin>>c;if(toupper(c)='Y')Delete();return ;elsereturn ; else /未找到结点 cout<<"未找到该学生!n" getch();void Manage:Modify(string ID) Person *p1;char c;p1=person;while(p1) if(p1->No=ID) break; else p1=p1->next; if(p1!=NULL)/若找到结点 system("cls");cout<<"所要修改的学生的信息如下:n"<<endl;Output(p1);docout<<"1. 修改姓名 2. 修改性别 3. 修改年龄 4. 修改联系方式 5. 退出修改 n"<<endl;cout<<"请选择(1-5)要修改的信息n"<<endl;cin>>c;if(c!='5')cout<<"请输入新的信息: "switch(c)case '1': cin>>p1->Name; break;case '2': cin>>p1->Sex; break;case '3': cin>>p1->Age; break;case '4': cin>>p1->Tel; break;default: break;while(c!='5');system("cls");cout<<"t *修改成功*n"<<endl;cout<<"是否继续修改(Y/N): "<<endl;cin>>c;if(toupper(c)='Y')cout<<"请输入要修改人员的ID: "cin>>ID;cout<<endl;Modify(ID);return ;elsereturn ; else /未找到结点 cout<<"未找到该学生!n" getch();/暂停 void Manage:Save() /数据写入到文件 ofstream fPerson("Person.txt",ios:out); char c; cout<<"n保存数据,是否继续?Y/N:"cin>>c; if(toupper(c)!='Y')return; Person *p=person; while(p) fPerson<<p->No<<" "<<p->Name<<" "<<p->Sex<<" "<<p->Age<<" "<<p->Tel<<endl; p=p->next; fPerson.close(); cout<<"n保存成功.n" system("pause"); void Manage:Load() /数据读入 ifstream fPerson; Person *p=person; string No,Age,Tel;char Name20,Sex10; fPerson.open("person.txt",ios:in); fPerson>>No>>Name>>Sex>>Age>>Tel;while(fPerson.good() p=new Person(No,Name,Sex,Age,Tel);p->next=0; /员工结点加入链表 if(person) /若已经存在结点 Person *p2; p2=person; while(p2->next) /查找尾结点 p2=p2->next; p2->next=p; /连接 else /若不存在结点(表空) person=p; /连接 fPerson>>No>>Name>>Sex>>Age>>Tel;fPerson.close(); void Manage:Find(string ID)Person *p1;p1=person;while(p1) if(p1->No=ID) break; else p1=p1->next; if(p1!=NULL)Output(p1);elsecout<<"未找到该学生"<<endl;void Manage:Find(char Name20)Person *p1;int count=0;p1=person;while(p1) if(strcmp(p1->Name,Name)=0)count+;Output(p1);p1=p1->next; if(count)cout<<"t查询成功!"<<endl;cout<<"n共找到 "<<count<<" 个名字为 "<<Name<<" 的同学n"<<endl;elsecout<<"ntt未找到该学生!n"<<endl;void Manage:Query()char c;string ID,Tel;char Name20;docout<<"1. 按学号查找 2. 按名字查找 3. 按电话号码查找 4.退出查找"<<endl;cin>>c;/system("cls");cout<<endl;switch(c)case '1': cout<<"输入学号 ID: "cin>>ID;Find(ID); ; break;case '2': cout<<"输入姓名 Name: "cin>>Name;Find(Name); ; break;case '3': cout<<"输入电话号码 Tel"<<endl;cin>>Tel;Find(Tel);break;case '4':break;default: cout<<"输入有误 请重新输入!n"<<endl;while(c!='1'&&c!='2'&&c!='3'&&c!='4');cout<<"ttt *查找成功*n"<<endl;cout<<"是否继续查找(Y/N) "<<endl;cin>>c;if(toupper(c)='Y')Query();return ;elsereturn ;system("pause");void Manage:Look()/设置字体颜色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);system("cls");Person *p1;int count=0;char c;p1=person;while(p1) cout<<"ID: "<<p1->No<<"t姓名: "<<p1->Name<<endl;count+;p1=p1->next; if(count!=0)cout<<"ntt预览成功! n"<<endl;cout<<"查询详细信息(Y/N): "cin>>c;if(toupper(c)='Y')Query();return;elsereturn ;elsecout<<"尚未创建通讯录,是否创建(Y/N)"<<endl;cin>>c;if(toupper(c)='Y')Add();return;elsereturn ;void Manage:DesTory()/设置字体为红色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED);char c;system("cls");cout<<"nttt* 清除信息 *n"cout<<"警告:n 清除通讯录信息会导致您保存的信息完全消失!n"<<endl;cout<<"是否决定清除通讯录信息(Y/N): "<<endl;cin>>c;if(toupper(c)!='Y')return;cout<<"请再次确认(Y/N)"<<endl;cin>>c;if(toupper(c)!='Y')return;elsePerson *p; p=person; while(p) p=p->next; delete person; person=p; person=0;/ofstream fPerson("person.txt");/fPerson.close();system("pause");void Manage:TJ()Person *p1;int count=0,Boy=0,Girl=0;p1=person;while(p1) count+;if(strcmp(p1->Sex,"男")=0)Boy+;if(strcmp(p1->Sex,"女")=0)Girl+;p1=p1->next; cout<<"n总共有 "<<count<<"份通讯录n"<<endl;cout<<"男生: "<<Boy<<"t 女生: "<<Girl<<"n"<<endl;system("pause");int main(void)Manage m;int c;do /设置字体为绿色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_GREEN);system("cls");cout<<" ="<<endl;cout<<" t 1.新增通讯录 t "<<endl;cout<<" t 2.删除通讯录 t "<<endl;cout<<" t 3.修改通讯录 t "<<endl;cout<<" t 4.查询详细信息 t "<<endl;cout<<" t 5.保存数据 t "<<endl;cout<<" t 6.预览信息 t "<<endl;cout<<" t 7.清除通讯录 t "<<endl;cout<<" t 8.统计 t "<<endl;cout<<" ="<<endl;cout<<"0退出t请选择(1-8): "cin>>c;switch(c) case 1: m.Add(); break; case 2: m.Delete();break; case 3: system("cls");cout<<"请输入要修改人员的ID: "cin>>ID;cout<<endl;m.Modify(ID); ;break; case 4: system("cls");m.Query(); ; break; case 5: m.Save(); break;case 6: m.Look(); break;case 7: m.DesTory(); break;case 8: m.TJ(); break;default: break; while(c!=0); char s;cout<<"n是否要保存您的所有操作(Y/N): "<<endl;cin>>s;if(toupper(s)='Y')m.Save();return 0;