《最新VC--课程设计报告.doc》由会员分享,可在线阅读,更多相关《最新VC--课程设计报告.doc(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateVC-课程设计报告VC+程序设计大作业 VC课程设计报告课 程:VC+课程设计 系 别:班 级:学 号:姓 名:选题2名称: 选题2难易级别:自报成绩: 起止时间:指导教师: 日期: 年 月 日目 录 一、 课题目标1.1 程序功能简介1.2 课程设计要求1.3 评定难易级别二、 具体实现2.1 程序总体方案2.1.1开发平台2.1.2程序结构或流程图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 改进N 2.2.n.1 改进方案 2.2.n.2 具体实现三、 调试报告(在设计和实现过程所遇到的问题和解决,请如实填写)四、 总体小结(在整个设计过程中的心得体会)五、 分工介绍 (是独立完成还是合作完成,若为合作完成,说明合作者以及之间的具体分工)一、课题目标1.1 程序功能简介 一个电话簿管理小程序。利用文本文件存储电话簿数据,具有添加、删除、显示和查询联系人电话号码的功能。1.2 课程设计要求(1)将电话簿数据和相应的函数封装在类中,改写
3、程序使之结构化。(2)增加记录修改功能,能选择修改用户的姓名、电话。(3)增加录入时间的显示及存储。(4)增加缺省的查询方式,即查询时只输入姓名的首字母,所有符合这一条件的电话资料均在屏幕上显示。1.3 评定难易级别 A级二、具体实现2.1 程序总体方案2.1.1开发平台操作系统:Windows XP开发工具:VC+6.02.1.2程序结构或流程图(1)主函数的流程图: 开始输出菜单及提示输入选择 1 2 3 4 5 6 0根据首字母查找根据姓名查找修改已有记录删除已有记录显示电话簿内容添加电话簿记录返回主菜单退出退出结束2.2 所做改进 2.2.1改进一2.2.1.1 改进方案 把程序改成类
4、:将数据成员和对这些数据相关的操作函数封装在类中,使程序结构化。定义了类的友元类,使访问类成员时更方便。2.2.1.2 具体实现class TelRecord /定义类private:int Year,Month,Day,Hour,Minute;char LName20;char FName20;char Tel20;public: TelRecord(); /缺省的构造函数TelRecord(); /析构函数 TelRecord(char*,char*,char*,int,int,int,int,int);void setRecord(char*,char*r,char*,int,int,i
5、nt,int ,int );void setTime();char* getLName(); /获得姓char* getFName(); /获得名char* getTel() ; /获得电话号码int getYear(); /获得年int getMonth(); /获得月int getDay(); /获得日 int getHour(); /获得时int getMinute() ; /获得分int compare(TelRecord&); /按照姓名比较若返回值为零,则两者相等void show();void modify(char*); /修改电话号码 void modify(char *,c
6、har *); /修改姓名int lookChar(char); /首字母匹配的返回1,不匹配的返回/按照首字母查找,若匹配返回1,否则返回0; class Node /结点类 friend class List; private: TelRecord* pData; Node *pNext;public: Node() pData=new TelRecord; pNext=0; /缺省的构造函数Node(TelRecord telrecord,Node node) pData=&telrecord; pNext=&node; /构造函数 Node(Node&node) if(node.pDa
7、ta!=NULL) /用于拷贝的构造函数 pData=node.getData(); pNext=node.getpNext(); Node(); void inputData(TelRecord*pdata) pData=pdata; /数据录入函数 void showNode() pData-show(); /结点显示函数 TelRecord* getData() return pData; /获得结点信息函数Node* getpNext() Node *p=pNext; return p; /获得下一个结点;class List /链表类 Node* pHead;public: List
8、(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* lookUpfirstletter(); /按照姓氏首字母智能查询函数 void lookUp(TelRecord &); /按照姓名智能查询函数 void inser
9、t(Node*); /排序插入函数 void deleteNode(Node*); /删除结点函数 void delete_record(); /删除记录函数 int verify_delete(); /确认删除的函数 void add_record(); /在链表中增加一个记录函数 void modify_record(); /修改数据函数 void modifyTel(); /修改电话号码函数 void modifyName(); /修改姓名函数 void load_list_from_file(); /从文件载入数据函数 void write_list_to_file(); /把信息写入
10、文件的函数void handle_choice(int); /选择处理函数;2.2.2改进二2.2.2.1 改进方案 增加时间单元的存储与显示:在结点数据域中增加一个时间单元,在结点数据的构造函数中调用系统时间给时间单元赋值。2.2.2.2 具体实现void setTime() time_date=time(0); CurrentTime=localtime(&time_date); Year=CurrentTime-tm_year+1900; Month=CurrentTime-tm_mon+1; Day=CurrentTime-tm_mday; Hour=CurrentTime-tm_ho
11、ur; 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,int hour,int minute ) strcpy(LName,lastname); st
12、rcpy(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 具体实现/要求用户确认函数int List:verify_delete() char YesNo; coutn 确定删除吗?(y/n) ; YesNo=cin.get(); while(YesNo!=y&YesNo!=n) cin.igno
13、re(20,n); cout 输入有误,重新输入: ; 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.getListHead();do system
14、(cls);coutn=菜单=n;.cout=n;cout请输入您的选择:n;cin.clear();cin.getline(str,20);choice=atoi(str); FriendsList.handle_choice(choice);while(choice!=0);return 0;三、调试报告以下面的表格形式记录程序调试和测试过程。日期遇到的问题解决方法9月5号在main()函数中定义的变量,在其调用的函数中不能实现。了解到变量的作用域问题,把需要在整个程序中用得到变量定义为全局变量,由于是多文件,故使用了extern 说明。9月8号在返回主菜单的程序中,总是有异常的程序终止。检查程序,查找各种输入流函数的用法,在一些输入后立即清空缓存,或提取缓存区中的换行符。9月11号设计容错函数时,出现程序异常终止。检查程序代码,做细节改动9月13号电话簿输出出现错误,姓名与电话号码交叉输出。检查程序,在读取结点数据时,数据成员顺序与构造函数中不一致,修改。四、总体小结 此次课程设计的题目的程序流程并不复杂,但实现的操作较多,涉及类的继承和友元类的实现,要有正确地访问类的私有数据途径;关键的是,实现了文本文件的输入输出,在大数据程序的实现中,可方便地调用、存储数据。五、分工介绍独立完成。-