收藏 分销(赏)

C语言通讯录程序课程设计.docx

上传人:丰**** 文档编号:3530756 上传时间:2024-07-08 格式:DOCX 页数:41 大小:473.04KB
下载 相关 举报
C语言通讯录程序课程设计.docx_第1页
第1页 / 共41页
C语言通讯录程序课程设计.docx_第2页
第2页 / 共41页
C语言通讯录程序课程设计.docx_第3页
第3页 / 共41页
C语言通讯录程序课程设计.docx_第4页
第4页 / 共41页
C语言通讯录程序课程设计.docx_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、C语言通讯录程序课程设计412020年4月19日文档仅供参考3.6 实例6 通讯录程序本实例希望设计一个通讯录程序,要求实现通讯录信息的录入,并具有添加、查询、删除、显示等功能;使用结构体存储通讯录中记录信息;使用链表来实现通讯录信息的添加、删除、查询及显示等操作;通讯录程序可实现文件读写,在通讯录信息录入结束之后,可存入文件中,在下次程序运行时可将通讯录中的记录读取到程序中。通讯录程序可采用基于Win32控制台程序构建或采用基于MFC应用向导.EXE的应用程序,下面对这两种方法进行详细介绍。3.6.1. 设计目的1、掌握结构体的基本工作原理和工作方式。2、熟悉结构体与链表的使用方法。3、熟悉

2、C语言下数据的输入与输出。4、掌握C语言下对TXT文件的读写操作。5、熟悉函数的设计方法及调用方法。3.6.2. 基本要求1、本实例要求实现对通讯录信息的查找、添加、删除、显示等功能,每个功能模块均能实现随时从模块中退出,能够经过键盘对功能进行选择,完成一个通讯录管理系统的运行。2、要使用结构体来实现对通讯录信息的存储。3、使用链表来实现对通讯录信息的查找、添加、删除、浏览显示。4、使用文件对记录进行存储,程序运行时还能够从文件中读取记录。5、系统设计完成后应实现类似下图所示界面。3.6.3 设计结构及算法分析在进行程序设计时,选择一种合理的数据存储结构是非常关键的。本实例根据题目要求,采用结

3、构体来存放通讯录中的信息,并采用文件存储通讯录中的信息。1、存储结构本实例存储数据时,除了采用最常见的基本类型存储外,采用结构体的方式来存储通讯录中的个人信息,结构体如下所示:struct stuchar name20; /*人名*/char telephone20; /*电话*/char sex4; /*性别*/char company20; /*单位*/struct stu *next; /*链表节点*/;typedef struct stu STU;2、main()主函数采用模块化设计,功能放在各模块函数中实现。主函数是程序的入口,在其中采用循环结构,根据用户的键盘输入,依次调用各功能函

4、数。3、mycreate()函数-创立链表函数函数根据用户输入的信息,存储到结构体中,并建立链表结构,函数返回链表的头指针。链表建立完成后,可根据链表的头指针来添加后续指针。4、myadd()函数-添加学生信息记录函数函数根据用户输入信息,分配内存,将数据存储到结构体中,并建立新的链表节点,链接到已经建立好的链表尾部。5、mydelete()函数-删除链表节点函数根据用户输入通讯录中人名,在已有的链表中查找该人名信息存放的节点,如找到该节点,则删除该节点,并对链表结构重新链接;如未找到该人名信息的节点,则提示用户不存在。6、mydisplay()函数-显示所有用户记录函数用来遍历所有节点,并向

5、屏幕上输出所有节点的通讯录中的详细信息。7、displaymenu()函数-显示菜单函数函数向屏幕上输出,用户能够选择的选项菜单,给用户提示信息,给用户选择做出提示。8、mysearch()函数-查找学生信息函数用来查找通讯录中人名信息存在与否,如不存在则提示用户,如存在返回该人名的链表节点。3.6.4. 程序执行流程图功能模块图3.6.5 基于Win32控制台的C语言程序设计详细步骤步骤1:建立一个工程在Visual C+6.0的集成开发环境下,单击File(文件)菜单项,之后选择其子菜单项New(新建),如下图所示。屏幕上回弹出New(新建)对话框,如下图所示。单击对话框上方的Projec

6、ts(工程)选项卡,在其下方列表中选择Win32 Console Application选项,在右侧的Project name(工程名)框中输入工程名Address,在Location(目录)中输入工程文件存放的目录C: Student,之后单击OK按钮。单击OK按钮后,会弹出如下图所示的界面,为了方便编程,选择A simple application,之后单击Finish按钮。之后,弹出如下图所示界面。界面中包含了建立此工程文件的头文件及路径等信息。单击OK按钮,则进入了一个简单的C语言Win32控制台程序集成开发界面,如下图所示。左侧窗口为工程管理窗口,选择FileView选项卡,经过点击

7、“+”可打开工程的文件及目录列表,工程的很多操作都需要经过此窗口进行。同时经过双击列表中的Address.cpp文件名,可在中央的编辑窗口中打开其文件,如下图所示,此文件中只包含有一个主函数main()框架。步骤2:添加程序头文件,在打开的Address.cpp文件上部,添加如下代码。#include #include #include #include 步骤3:在主函数上面添加函数定义、变量定义以及结构体定义,如下所示。struct stuchar name20; /*姓名*/char telephone20; /*电话*/char sex4; /*性别*/char company20; /

8、*公司*/struct stu *next; /*链表节点*/;typedef struct stu STU;STU *mycreate(); /*创立节点*/void mydisplay(STU *head); /*显示节点*/void myadd(STU *head); /*增加记录*/STU *mysearch(STU *head,char name20); /*查找记录*/void mydelete(STU *head,char name20); /*删除记录*/void displaymenu(); /*显示所有记录*/位置如下图所示:步骤4:添加main()函数的实现部分以及其它功

9、能函数,在main()主函数中添加代码内容如下:int main(int argc, char* argv)/*主函数*/STU *head=NULL,*p;char name20;int select;while(1) displaymenu(); /显示功能菜单printf(请选择一个功能:);scanf(%d, &select);switch( select )case 1: / 录入通讯记录/getchar();head = mycreate();mydisplay(head);break;case 2: /添加通信记录/getchar();myadd(head);mydisplay(

10、head);break;case 3: /查找通信记录printf(请输入要查找的人的姓名:);scanf(%s,name);p = mysearch(head,name);if (p!=NULL)printf(%s %s %s %s ,p-telephone,p-name,p-sex,p-company);elseprintf(没找到!);break;case 4: /删除通信记录printf(请输入要删除的人的姓名:);scanf(%s,&name);mydelete(head,name);mydisplay(head);break;case 5: /显示通讯记录mydisplay(hea

11、d);break;case 9: /退出系统exit(0);default: /输入错误的功能选项printf(选择功能错误,请重新选择。n);break; /end of switchprintf(按任意键继续.n);getch(); / end of whilereturn 0;STU *mycreate()/*创立链表*/STU *head,*p,*q;head = (STU *)malloc(sizeof(STU);q = head;printf(请输入:电话号码 姓名 性别 单位:n);p = (STU *) malloc(sizeof(STU);scanf(%s%s%s%s,p-t

12、elephone,p-name,p-sex,p-company);q-next = p;q = p;q-next = NULL;return head;void myadd(STU *head) /*添加记录*/STU *p;p = (STU *) malloc(sizeof(STU);printf(请输入:电话号码 姓名 性别 单位:n);scanf(%s%s%s%s,&p-telephone,p-name,p-sex,p-company);p-next=head-next;head-next = p;void mydelete(STU *head,char name20) /*删除记录*/

13、STU *p,*q;q = head;p = head-next;while(p!=NULL)if(strcmp(p-name,name)=0)q-next = p-next;free(p);break;q = p;p = p-next;return;STU *mysearch(STU *head,char name20) /*查找记录*/STU *p;p = head-next;while(p!=NULL)if(strcmp(p-name,name)=0)break;p = p-next;return p;void mydisplay(STU *head) /*显示记录*/STU *p;p

14、= head-next;while(p!=NULL)printf(%s %s %s %sn,p-telephone,p-name,p-sex,p-company);p = p-next;void displaymenu( ) /*显示菜单*/system(cls);printf(* M E N U *nn);printf( 1. 创立通讯录n);printf( 2. 添加通讯录n);printf( 3. 查找通讯录n);printf( 4. 删除通讯录n);printf( 5. 显示通讯录n);printf( 6. 退出通讯录系统n);printf(* M E N U *nn);至此所有代码输

15、入工作完成。步骤5. 程序调试单击Visual C + 6.0环境下的工具条中快捷执行按钮或(Ctrl + F5),按照提示菜单输入选择键就能够进行相应操作,程序执行结果如下所示。3.6.6 基于MFC应用向导.EXE的应用程序设计详细步骤步骤1:建立一个工程在Visual C+6.0的集成开发环境下,单击File(文件)菜单项,之后选择其子菜单项New(新建),如下图所示。屏幕上回弹出New(新建)对话框,如下图所示。单击对话框上方的Projects(工程)选项卡,在其下方列表中选择MFC AppWizard (exe) 选项,在右侧的Project name(工程名)框中输入工程名Addr

16、ess,在Location(目录)中输入工程文件存放的目录C:Address,之后单击OK按钮。如下图所示:单击OK按钮后,会弹出MFC程序创立向导,如下图所示的界面,选择基于对话框的选项(Dialog based),之后单击Finish按钮。之后,弹出如下图所示界面。界面中包含了建立此工程文件的头文件及路径等信息。单击OK按钮,则进入了一个简单的C语言MFC应用向导.EXE的应用程序集成开发界面,如下图所示。由于MFC程序含有用户界面,因此在编写代码前,能够设置用户的界面,经过单击左侧工程管理窗口中的ResourceView选项卡,Dialog下的IDD_ADDRESS_DIALOG选项,则

17、界面显示在在集成开发环境中间的编辑区域。采用右侧工具箱进行界面设计,工具箱中提供了常见的界面应用控件,可点击控件图标之后在界面上画出控件对象,如创立多个相同的控件对象,可在创立第一个后,采用复制黏贴的方式创立其它多个相同的控件对象。构建界面时,删除上图中界面中已有控件,并使用其中的Static Text控件(用于显示文字信息)、Edit Box控件(用作输入框)和、Button控件(用作按钮),构建界面如下图所示。要求七个Button控件连续创立,创立好第一个按钮,其它的可采用复制的方式,这样按钮的ID会连续;之后在按钮上单击鼠标右键,选择Properties菜单项,之后改变其Caption属

18、性(按钮的显示属性),七个按钮的Caption属性分别设置为“添加记录”、“删除记录”、“查找记录”、“显示记录”、“写入文件”、“读取文件”、“退出系统”。选中七个按钮,在Visual C+ 环境下菜单中的Layout下的指令,可对按钮进行排列操作。按照同样的方法,按照顺序从上到下依次创立五个Edit Box控件,五个Static Text控件,之后单独创立一个Edit Box控件放在右侧。五个Static Text控件Caption属性分别设为“姓名:”、“电话:”、“性别:”、“单位:”、“爱好:”。构建的界面如下图所示。之后在右侧的Edit Box控件上单击鼠标右键,选择Propert

19、ies菜单,之后选择Styles选项卡,在Multiline 左侧方框内勾选对号,用来多行显示记录信息。之后在界面空白处,单击鼠标右键,选择Properties菜单,之后改变窗口Caption属性值为“通讯录系统”,其窗口标题栏会做相应改变,至此界面创立完毕,下面添加程序代码及控件变量。为添加控件变量,即与输入文本框Edit Box控件所对应的变量,方法为:单击菜单中的“View”-“ClassVizard”,弹出对话框如下图所示,选择“Member Variables”选项卡,选择IDC_EDIT1,之后单击“Add Variable”按钮。在弹出的对话框中添加变量名为“m_Name”,如下

20、图所示。之后按照如上方法,选择IDC_EDIT2至IDC_EDIT6,之后单击“Add Variable”按钮。在弹出的对话框中添加变量,对应变量名如下图所示。定义变量时注意变量字母大小写。之后单击“OK”按钮,至此界面创立及控件变量设计完毕,下面来添加程序代码。步骤2:在“AddressDlg.h”文件中添加代码。在Visual C+ 环境下,单击左侧工程窗口中的FileView选项卡,单击“+”,打开文件列表。双击“AddressDlg.h”文件,打开其文件,在文件上部,在代码行class CAddressDlg : public CDialog上部,添加如下代码:struct stuch

21、ar name8;char telephone13;char sex2;char company20;char interest20;struct stu *next;typedef struct stu STU;在代码行class CAddressDlg : public CDialog下部,public:处添加如下代码:STU *mycreate(); void mydisplay(STU *head); void myadd(); STU *mysearch(STU *head,char name8); void mydelete(STU *head,char name8);void w

22、ritedata(CString m_Display);void readdata();STU *head,*p; STU *curent;char name8;LPCTSTR m_lpszPathName ;CFile m_file ;CFileException m_fe;char buf1000;在代码行DECLARE_MESSAGE_MAP()上部,添加代码如下:afx_msg void OnButtonClicked(UINT nID);上面代码所加位置如图所示:步骤3:在“AddressDlg.cpp”文件中添加代码。双击“AddressDlg.cpp”文件,打开其文件,在文件上部

23、,添加头文件如下:#include #include #include 之后在后面的消息映射中添加代码,在消息映射行BEGIN_MESSAGE_MAP(CAddressDlg, CDialog)下部添加代码如下:ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON7, OnButtonClicked)位置如下图所示:之后在“AddressDlg.cpp”文件中找到如下代码行:CAddressDlg:CAddressDlg(CWnd* pParent /*=NULL*/): CDialog(CAddressDlg:IDD, pParent)在其

24、内部添加初始化调用函数如下所示:head = mycreate();位置如下图所示:步骤4:在“AddressDlg.cpp”文件中添加函数代码,在空白处添加函数代码如下所示:void CAddressDlg:OnButtonClicked(UINT nID)/*按钮相应事件*/int nIndex = nID - IDC_BUTTON1 ;switch( nIndex )case 0: /添加通讯录myadd();mydisplay(head);m_Name = _T();m_Telephone = _T();m_Sex = _T();m_Company = _T();m_Interest

25、= _T();UpdateData(FALSE);break;case 1: /删除通讯录UpdateData(TRUE);strcpy(name,m_Name);mydelete(head,name);mydisplay(head);m_Name = _T();m_Telephone = _T();m_Sex = _T();m_Company = _T();m_Interest = _T();UpdateData(FALSE);break;case 2: /查找通讯录UpdateData(TRUE);strcpy(name,m_Name);p = mysearch(head,name);if

26、 (p!=NULL)m_Display.Format(姓名:%8.8s 电话:%13.13s 性别:%2.2s 单位:%20.20s 爱好:%20.20s,p-name,p-telephone,p-sex,p-company,p-interest);UpdateData(FALSE);elsem_Display=没找到记录! ;UpdateData(FALSE);break;case 3: /显示通讯录mydisplay(head);break;case 4:writedata(m_Display);break;case 5:readdata();UpdateData(FALSE);break

27、;case 6: /退出通讯录系统exit(0);default:break; void CAddressDlg:myadd()/*在链表中增加一条记录*/STU *p;p = (STU *) malloc(sizeof(STU);UpdateData(TRUE); strcpy(p-name, m_Name); strcpy(p-telephone , m_Telephone);strcpy(p-sex, m_Sex); strcpy(p-company , m_Company);strcpy(p-interest , m_Interest);curent-next = p;p-next =

28、 NULL;curent = p;STU *CAddressDlg:mycreate()/*创立链表头*/STU *head;head = (STU *)malloc(sizeof(STU); curent = head;curent-next = NULL;return head;void CAddressDlg:mydelete(STU *head,char name8) /*在链表中删除一条记录*/STU *p,*q;int i ,j;BOOL same = FALSE;q = head;p = head-next;while(p!=NULL)for(j=0;(p-namej= )&(j

29、8);j+) ;for(i=0;(namei= )&(i8);i+) ;for(;(i8)&(jnamej!=namei)same = FALSE;break;elsesame = TRUE;if(same = TRUE)q-next = p-next;free(p);break;curent =q = p;p = p-next;return;void CAddressDlg:mydisplay(STU *head) /*显示链表中所有记录*/ CString str;STU *p;p = head-next;m_Display=;UpdateData(FALSE);while(p!=NULL

30、)str.Format(姓名:%8.8s 电话:%13.13s 性别:%2.2s 单位:%20.20s 爱好:%20.20s,p-name,p-telephone,p-sex,p-company,p-interest);m_Display+=str ;m_Display+= rn;UpdateData(FALSE);p = p-next;STU *CAddressDlg:mysearch(STU *head, char name8) /*在链表中查找一条记录*/STU *p;BOOL same = FALSE;int i ,j;p = head-next;while(p!=NULL)for(j

31、=0;(p-namej= )&(j8);j+) ;for(i=0;(namei= )&(i8);i+) ;for(;(i8)&(jnamej!=namei)same = FALSE;break;elsesame = TRUE;if(same = TRUE)break;p = p-next;return p;void CAddressDlg:writedata(CString m_Display) /*把字符串写入文件*/m_lpszPathName = address.txt ;if (!m_file.Open(m_lpszPathName,CFile:modeCreate|CFile:mod

32、eWrite, &m_fe) AfxMessageBox(文件打不开); elsestrcpy(buf,(LPCTSTR)m_Display);m_file.Write(buf,m_Display.GetLength();m_file.Close();void CAddressDlg:readdata()/*把文件中的数据写入链表中*/STU *p;m_lpszPathName = address.txt ;if (!m_file.Open(m_lpszPathName,CFile:modeRead,&m_fe) AfxMessageBox(文件打不开); elsewhile(m_file.G

33、etPosition()name,m_Name);m_file.Read(buf,6);memset(buf,0,sizeof(buf);m_file.Read(buf,13);/读取记录第二条信息m_Telephone.Format(%13s,buf);strcpy(p-telephone,m_Telephone);m_file.Read(buf,6);memset(buf,0,sizeof(buf);m_file.Read(buf,2);/读取记录第三条信息m_Sex.Format(%2s,buf);strcpy(p-sex,m_Sex);m_file.Read(buf,6);memset

34、(buf,0,sizeof(buf);m_file.Read(buf,20);/读取记录第四条信息m_Company.Format(%20s,buf);strcpy(p-company,m_Company);m_file.Read(buf,6);memset(buf,0,sizeof(buf);m_file.Read(buf,20);/读取记录第五条信息m_Interest.Format(%20s,buf);strcpy(p-interest,m_Interest);m_file.Read(buf,2); curent-next = p;p-next = NULL;curent = p;m_file.SeekToBegin();memset(buf, 0, sizeof(buf);m_file.Read(buf,m_file.GetLength();m_Display.Format(%s,buf);m_Name= ;m_Telephone= ;m_Sex = ;m_Company= ;m_Interest = ;m_file.Close();至此代码添加完毕。步骤5:调试运行。单击Visual C + 6.0环境下的工具条中快捷执行按钮或(Ctrl + F5),程序执行结果如下所示,经过按钮来运行程序,可实现记录添加、删除、查找、显示、写入文件、读取文件、退出系统等功能。

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服