课程设计说明书课程名称 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
★指令“3-修改人员”代表调用修改人员函数Modify(),体统根据操作者输入的ID找到对应的记录,将新输入的数据对应地赋给要修改的各成员★指令“5-保存数据”表示调用存盘函数Save(),输入“Y”或者“N”以进一步操作★指令“8-统计”,调用TJ();函数,按照男、女统计人数:★指令“7-清除通讯录”,调用DesTory()清除已存数据:(三)优缺点分析优点:★ 系统中包含了输入、输出、保存、删除、查询、修改等多种功能,系统操作灵活性较强,功能较强大;★ 可以随意地选择不同的指令进行操作;★ 排版效果清晰明了,美观;★ 操作简单方便缺点:★ 由于该系统对数据采用文本保存方式,所以安全性不可靠★ 采用链表结构操作,不能支持超大量的数据,否则运行缓慢五、总结本次设计我们选择的题目是通讯录因为事先的计划非常明确,所以我们在完成这个设计的过程也是比较顺利的在系统分析和设计的部分仍然花了比较多的时间模块设计部分因为涉及功能的实现,要从抽象的设计转化成实际的代码,因此对于某项功能的实现方法都思考得比较详尽加上在开发系统之前,我们阅读很多与本系统有相关内容的书籍以做参考,使得此次系统编写能顺利进行。
由于班里每个人都需要做一份设计,所以我们经常互相交流在交流的时候经常能够互相提出更好的建议经过对通讯录的分析与编写,我得到了很大的收获自主学习的必要性更是解决问题的基础这次设计使我重温了以前学过的各科知识,让我对C++编程有了更深刻的认识除了对系统作出正确的分析,实际的调查工作对系统的整体设计有着至关重要的作用所以在分析系统之前,我花了一些时间在公司的实际管理工作调查上也因为这样,如何编写代码逐渐变得明朗每一个功能模块经过调查后后,各个功能逐渐显露出来,然后,反复探讨,验证这项功能是否有存在的必要,是否可以改进得更好在这样的前提下,最后顺利完成了这份设计 这次C++系统设计作业,提升了我分析问题的能力和思考问题的逻辑能力,更明白实际调研的重要性从这次设计学到的东西,相信会对我们日后的学习工作起到很大的指导作用附录:通讯录系统源码(C++)#include#include#include#include#include//#includeusing namespace std;string ID;//具有唯一性class Person{protected: string No; //学号 string Age; char Name[20]; //姓名 char Sex[10]; //性别 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 Manage{private: 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 Name[20]);//按姓名查找 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<<"\t\t学号: "<No<Name<Sex<Age<Tel<>No; cout<No==No) { break; } else { p1=p1->next; } } if(p1!=NULL) { cout<<"该学号已存在,是否修改该学生信息(Y/N) "<>c; if(toupper(c)=='Y') { cout<<"该学生信息为:"<>Name; cout<>Sex; cout<>Age; cout<>Tel; cout<next=0; //学生结点加入链表 if(person) //若已经存在结点 { p2=person; while(p2->next) //查找尾结点 { p2=p2->next; } p2->next=p; //连接 } else //若不存在结点(表空) { person=p; //连接 } system("cls"); cout<<"\t\t\t ***添加成功***\n"<>c; if(toupper(c)=='Y') { Add(); return ; } else return ;}void Manage::Delete() //删除人员 { system("cls"); char c; string No; cout<<"\n** 删除信息 **\n"; cout<<"输入要删除的学生ID:\t"; cin>>No; cout<No==No) break; else { p2=p1; p1=p1->next; } } //删除结点 if(p1!=NULL)//若找到结点,则删除 { cout<<"所要删除的学生的信息如下:\n"<>c; if(toupper(c)!='Y') return; // system("pause"); if(p1==person) //若要删除的结点是第一个结点 { person=p1->next; delete p1; } else //若要删除的结点是后续结点 { p2->next=p1->next; delete p1; } cout<<"\t\t***删除成功***\n"; cout<<"是否继续删除(Y/N) "<>c; if(toupper(c)=='Y') { Delete(); return ; } else return ; } 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"<>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"<>c; if(toupper(c)=='Y') { cout<<"请输入要修改人员的ID: "; cin>>ID; cout<>c; if(toupper(c)!='Y') return; Person *p=person; while(p) { fPerson<No<<" "<Name<<" "<Sex<<" "<Age<<" "<Tel<next; } fPerson.close(); cout<<"\n保存成功...\n"; system("pause");} void Manage::Load() //数据读入{ ifstream fPerson; Person *p=person; string No,Age,Tel; char Name[20],Sex[10]; 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); } else cout<<"未找到该学生"<Name,Name)==0) { count++; Output(p1); } p1=p1->next; } if(count) { cout<<"\t查询成功!!!"<>c; // system("cls"); cout<>ID; Find(ID); }; break; case '2': { cout<<"输入姓名 Name: "; cin>>Name; Find(Name); }; break; case '3': { cout<<"输入电话号码 Tel"<>Tel; Find(Tel); };break; case '4':break; default: cout<<"输入有误 请重新输入!!!\n"<>c; if(toupper(c)=='Y') { Query(); return ; } else return ; 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: "<No<<"\t姓名: "<Name<next; } if(count!=0) { cout<<"\n\t\t预览成功!!! \n"<>c; if(toupper(c)=='Y') { Query(); return; } else return ; } else { cout<<"尚未创建通讯录,是否创建(Y/N)"<>c; if(toupper(c)=='Y') { Add(); return; } else return ; }}void Manage::DesTory(){ //设置字体为红色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED); char c; system("cls"); cout<<"\n\t\t\t** 清除信息 **\n"; cout<<"警告:\n 清除通讯录信息会导致您保存的信息完全消失!!!\n"<>c; if(toupper(c)!='Y') return; cout<<"请再次确认(Y/N)"<>c; if(toupper(c)!='Y') return; else { Person *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总共有 "<>c; switch(c) { case 1: m.Add(); break; case 2: m.Delete();break; case 3: { system("cls"); cout<<"请输入要修改人员的ID: "; cin>>ID; cout<>s; if(toupper(s)=='Y') m.Save(); return 0;}25。