1、 1VC课程设计报告课 程:VC+课程设计 系 别:班 级:学 号:姓 名:选题 2 名称: 选题 2 难易级别:自报成绩: 起止时间:指导教师: 日期: 年 月 日2目 录一、 课题目标1.1 程序功能简介1.2 课程设计要求1.3 评定难易级别二、 具体实现2.1 程序总体方案2.1.1 开发平台2.1.2 程序结构或流程图2.2 所做改进 2.2.1 改进一2.2.1.1 改进方案2.2.1.2 具体实现2.2.2 改进二2.2.2.1 改进方案2.2.2.2 具体实现2.2.n 改进 N2.2.n.1 改进方案2.2.n.2 具体实现三、 调试报告(在设计和实现过程所遇到的问题和解决,
2、请如实填写)四、 总体小结(在整个设计过程中的心得体会)五、 分工介绍(是独立完成还是合作完成,若为合作完成,说明合作者以及之间的具体分工)3一、课题目标1.1 程序功能简介一个电话簿管理小程序。利用文本文件存储电话簿数据,具有添加、删除、显示和查询联系人电话号码的功能。1.2 课程设计要求(1)将电话簿数据和相应的函数封装在类中,改写程序使之结构化。(2)增加记录修改功能,能选择修改用户的姓名、电话。(3)增加录入时间的显示及存储。(4)增加缺省的查询方式,即查询时只输入姓名的首字母,所有符合这一条件的电话资料均在屏幕上显示。1.3 评定难易级别A 级二、具体实现2.1 程序总体方案2.1.
3、1 开发平台操作系统:Windows XP开发工具:VC+6.02.1.2 程序结构或流程图(1)主函数的流程图:41 2 3 4 5 6 0开始输出菜单及提示输入选择添加电话簿记录显示电话簿内容删除已有记录修改已有记录根据姓名查找根据首字母查找返回主菜单退出结束退出52.2 所做改进 2.2.1 改进一2.2.1.1 改进方案把程序改成类:将数据成员和对这些数据相关的操作函数封装在类中,使程序结构化。定义了类的友元类,使访问类成员时更方便。2.2.1.2 具体实现class TelRecord /定义类private:int Year,Month,Day,Hour,Minute;char L
4、Name20;char FName20;char Tel20;public:TelRecord(); /缺省的构造函数TelRecord(); /析构函数TelRecord(char*,char*,char*,int,int,int,int,int);void setRecord(char*,char*r,char*,int,int,int,int ,int );void setTime();char* getLName(); /获得姓char* getFName(); /获得名char* getTel() ; /获得电话号码int getYear(); /获得年int getMonth();
5、 /获得月int getDay(); /获得日int getHour(); /获得时int getMinute() ; /获得分int compare(TelRecord /按照姓名比较若返回值为零,则两者相等void show();void modify(char*); /修改电话号码void modify(char *,char *); /修改姓名int lookChar(char); /首字母匹配的返回 1,不匹配的返回/ 按照首字母查找,若匹配返回 1,否则返回 0; class Node /结点类 friend class List; private:6TelRecord* pDat
6、a;Node *pNext;public:Node() pData=new TelRecord; pNext=0; /缺省的构造函数Node(TelRecord telrecord,Node node) pData= pNext= /构造函数Node(NodepNext=node.getpNext(); Node();void inputData(TelRecord*pdata) pData=pdata; /数据录入函数void showNode() pData-show(); /结点显示函数TelRecord* getData() return pData; /获得结点信息函数Node* g
7、etpNext() Node *p=pNext; return p; /获得下一个结点;class List /链表类 Node* pHead;public:List(Node* node=NULL) pHead=node; /构造函数List() if(pHead!=NULL) deleteList(); /析构函数void setpHead(Node* node) pHead=node; /重置链表头函数void showList(); /显示链表函数void deleteList(); /删除链表函数Node* getListHead() return pHead;Node* lookU
8、pfirstletter(); /按照姓氏首字母智能查询函数void lookUp(TelRecord /按照姓名智能查询函数void insert(Node*); /排序插入函数void deleteNode(Node*); /删除结点函数void delete_record(); /删除记录函数int verify_delete(); /确认删除的函数void add_record(); /在链表中增加一个记录函数void modify_record(); /修改数据函数 void modifyTel(); /修改电话号码函数void modifyName(); /修改姓名函数void l
9、oad_list_from_file(); /从文件载入数据函数void write_list_to_file(); /把信息写入文件的函数void handle_choice(int); /选择处理函数;72.2.2 改进二2.2.2.1 改进方案增加时间单元的存储与显示:在结点数据域中增加一个时间单元,在结点数据的构造函数中调用系统时间给时间单元赋值。2.2.2.2 具体实现void setTime() time_date=time(0);CurrentTime=localtime(Year=CurrentTime-tm_year+1900;Month=CurrentTime-tm_mon
10、+1;Day=CurrentTime-tm_mday;Hour=CurrentTime-tm_hour;Minute=CurrentTime-tm_min;int getYear() return Year; int getMonth() return Month; int getDay() return Day; int getHour() return Hour; int getMinute() return Minute; void setRecord(char*lastname,char*number,char*firstname,int year,int month,int day,
11、int hour,int minute )strcpy(LName,lastname);strcpy(Tel,number);strcpy(FName,firstname);Year=year;Month=month;Day=day;Hour=hour;Minute=minute;2.2.3 改进三2.2.3.1 改进方案使用户界面更加友好:避免输入数据类型错误导致程序无效循环或终止,在输入数据类型时进行判断,对非法输入予以提示。2.2.3.2 具体实现8/要求用户确认函数int List:verify_delete() char YesNo;cout“n 确定删除吗?(y/n) “;YesN
12、o=cin.get();while(YesNo!=ycout“ 输入有误,重新输入: “;YesNo=cin.get();if(YesNo=y) cin.get(); return 1;else cin.get(); return 0; /将输入的字符转换为整型int main() char str20;List FriendsList;cout“*欢迎使用电话簿管理系统*“endl;cout“按回车键开始“endl;cin.get(pause);system(“cls“);FriendsList.load_list_from_file();current_ptr=FriendsList.ge
13、tListHead();do system(“cls“);cout“n=菜单=n“;.cout“=n“;cout“请输入您的选择:n“;cin.clear();cin.getline(str,20);choice=atoi(str);FriendsList.handle_choice(choice);while(choice!=0);return 0;9三、调试报告以下面的表格形式记录程序调试和测试过程。日期 遇到的问题 解决方法9 月 5 号 在 main()函数中定义的变量,在其调用的函数中不能实现。了解到变量的作用域问题,把需要在整个程序中用得到变量定义为全局变量,由于是多文件,故使用了
14、 extern 说明。9 月 8 号 在返回主菜单的程序中,总是有异常的程序终止。检查程序,查找各种输入流函数的用法,在一些输入后立即清空缓存,或提取缓存区中的换行符。9 月 11 号 设计容错函数时,出现程序异常终止。检查程序代码,做细节改动9 月 13 号 电话簿输出出现错误,姓名与电话号码交叉输出。检查程序,在读取结点数据时,数据成员顺序与构造函数中不一致,修改。四、总体小结此次课程设计的题目的程序流程并不复杂,但实现的操作较多,涉及类的继承和友元类的实现,要有正确地访问类的私有数据途径;关键的是,实现了文本文件的输入输出,在大数据程序的实现中,可方便地调用、存储数据。五、分工介绍独立完成。