通讯录c语言大作业论文改正的
- 格式:doc
- 大小:84.50 KB
- 文档页数:15
c语言大作业需要改进的地方对于C语言大作业的改进,可以从多个方面入手。
以下是一些可能的方向:1.算法和数据结构优化:如果大作业中的算法或数据结构不够高效,可能会导致程序运行时间过长或占用过多内存。
考虑是否有更高效的数据结构或算法来解决相同问题。
2.错误处理:加强错误处理可以使程序更健壮。
考虑增加更多的错误检查,以及在出现错误时提供有用的反馈信息。
3.代码可读性:良好的代码风格和注释可以使代码更容易阅读和维护。
注意变量命名、代码布局和注释的清晰度。
4.代码复用:如果有很多重复的代码片段,考虑将其封装为函数或模块,以提高代码复用率。
5.测试和调试:增加单元测试和集成测试可以确保代码的正确性。
同时,使用调试工具可以帮助定位和修复问题。
6.性能优化:如果程序运行缓慢,可以考虑优化性能。
例如,减少不必要的计算、使用更有效的数据结构或算法等。
7.文档和注释:为代码添加清晰的文档和注释可以帮助他人理解你的代码。
即使是自己将来回顾,也能更快地理解代码的逻辑。
8.用户界面:如果程序有用户界面,考虑是否友好易用。
如果没有用户界面,考虑是否有必要添加一个,以便用户更容易地使用程序。
9.安全性和健壮性:检查程序是否有可能受到恶意攻击或产生不期望的行为。
例如,检查缓冲区溢出、格式化字符串漏洞等常见问题。
10.可扩展性和模块化:如果计划对程序进行扩展或修改,考虑使其模块化,以便更容易地添加新功能或修改现有功能。
这只是一些基本的建议,具体改进方向应根据大作业的具体要求和遇到的问题来确定。
高校信息专业C语言教学改进体验论文2018-12-20一、C语言教学的现状及改革的必要性1、教学方法(1)古老的C语言教学方法最初教授C语言程序设计,一般采用两节课讲理论,两节课上机,理论与实践1:1,上机课基本上是学生将课本上的例题调试通过就算成功,自己尝试编程很少,这样的结果是,一学期下来,学生根本就不会编程,效果很不理想。
(2)当前的C语言教学方法目前多数C语言教学采用一体化教学,即所有课程全部在机房上机,机房配有投影仪,边讲边练,这样的教学方式比传统的理论与实践分开教学要好很多,学生学习的知识能得到及时的巩固,但是,其教学内容还是没有跳出传统的C语言教学体系,传统的C语言教学内容有个致命的弱点,就是抽象,不直观,学生看不到C语言编程的强大功能,给人感觉学生不知道C语言到底能干什么,这样很难激起学生学习的兴趣,教学效果也很差,等到高年级发现可以利用C语言控制单片机和嵌入式系统,做出各种的项目,明白C语言的强大功能时,学生就开始后悔当初没好好学习C语言,可惜已经有些迟了。
2、学生现状与教学改革的必要性C语言编程学习需要有较强的'抽象和逻辑思维能力,也许那些高考分数较高的一本院校学生,会对C语言感兴趣,高职高专的学生逻辑思维能力较差,自学能力,学习自觉性都较差,,加之现在90后功利心普遍比较强,对于那些短时间看不到实际效果的东西失去兴趣,因此,必须进行教学改革,将抽象的C语言赋予一些直观的元素,体现C语言强大的硬件控制能力,将C语言控制单片机和嵌入式系统进行融合,将C语言的知识点贯穿于嵌入式系统开发的多个案例之中,这样就使学生的学习热情大大提高,教学效果自然就好。
二、我们改革的具体做法1、将51单片机中的7个经典案例融入C语言教学之中,这7个案例分别是流水灯控制、数码管显示控制、键盘扫描控制,音乐演奏器与电子琴设计,液晶显示控制,电子日历时钟闹钟设计,简易电子计算器设计,将C语言的理论知识贯穿于这7个案例之中,每个案例下分若干个子案例,如流水灯中,最开始是点亮一个发光LED,再到点亮多个,然后到开始流水,流水又分多种方式,这中间就涉及到C语言的语法、语句、顺序结构程序设计、循环结构程序设计、函数的编写和使用、位运算等知识,数码管的显示控制就涉及到循环结构、数组、函数的知识,键盘扫描涉及到分支结构、位运算、函数的知识,音乐演奏器与电子琴的设计涉及到数组、指针、宏定义等知识,液晶LCD显示控制涉及指针、结构体等知识,电子日历时钟闹钟设计和简易电子计算器的设计较为综合,几乎涵盖了C语言所有章节的知识,这样就将C语言传统的章节打乱了,分别融入到这7个项目当中。
c 课程设计作业通讯录一、教学目标本课程的教学目标是使学生掌握通讯录的基本知识,包括通讯录的格式、编排方法和使用技巧。
知识目标要求学生能够理解通讯录的概念,熟悉通讯录的各个部分及其作用,掌握编排通讯录的基本方法。
技能目标要求学生能够独立编排一个完整的通讯录,熟练使用通讯录软件进行编辑和管理。
情感态度价值观目标要求学生培养对通讯录的重视程度,认识到通讯录在日常生活和工作中的重要性,养成良好的通讯录使用习惯。
二、教学内容本课程的教学内容主要包括通讯录的基本概念、编排方法和使用技巧。
具体包括以下内容:1.通讯录的基本概念:介绍通讯录的定义、作用和分类,使学生理解通讯录的重要性。
2.编排方法:教授通讯录的编排原则、格式和步骤,引导学生掌握编排通讯录的技能。
3.使用技巧:介绍通讯录的使用方法、注意事项和快捷操作,帮助学生提高通讯录的使用效率。
三、教学方法为了达到本课程的教学目标,将采用以下教学方法:1.讲授法:通过讲解通讯录的基本概念、编排方法和使用技巧,使学生掌握相关知识。
2.案例分析法:分析实际案例,让学生了解通讯录在日常生活和工作中的应用,提高学生的学习兴趣。
3.实验法:安排实际操作环节,让学生亲自动手编排通讯录,巩固所学知识,提高实际操作能力。
四、教学资源为了支持本课程的教学内容和教学方法的实施,将准备以下教学资源:1.教材:选用内容丰富、结构清晰的通讯录教材,为学生提供系统性的学习资料。
2.参考书:提供相关参考书籍,拓展学生的知识视野。
3.多媒体资料:制作课件、演示文稿等多媒体资料,以图文并茂的形式展示教学内容,提高学生的学习兴趣。
4.实验设备:准备足够的计算机设备,让学生进行实际操作练习。
五、教学评估本课程的评估方式将采用多元化的形式,以全面、客观、公正地评价学生的学习成果。
评估方式包括:1.平时表现:观察学生在课堂上的参与度、提问回答、小组讨论等,记录学生的表现,作为评估的一部分。
2.作业:布置定期的作业,要求学生独立完成,通过作业的质量和进度评估学生的学习情况。
C语言课程设计通讯录管理班级:电子信息工程1003班姓名:苏娟娟学号:1007050302一、设计题目通讯录管理设计目标:进一步加深、巩固学生所学专业课程(《C语言》)的基本理论知识,理论联系实际,进一步培养学生综合分析问题和解决问题的能力。
掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能,充分发挥广大同学的潜力,使他们通过本次课程设计而得到全面的锻炼。
二、设计内容:(1) 设计系统的功能框图、流程图(2) 编写通讯录管理的源程序代码(3) 上机调试(4) 书写实习报告三、课程设计所用设备:每人一台计算机。
四、课程设计与功能分析:通讯录管理主要考察同学对结构体和数组的应用能力。
五、课程设计报告1、给出所选课程设计题目以及本题目具体所要完成的功能要求说明。
2、给出程序清单(计算机打印出的程序清单或手写)和程序中包含的变量、函数文字说明。
3、给出设计程序的运行结果(上述课程设计所选择的题目对应的程序运行结果)。
4、课程设计总结:对所选题目对应程序的运行情况做详细分析,总结本次设计所取得的经验。
如果程序未能全部调试通过,则应分析其原因。
5、报告要求字数不得少于1000字(不包括程序清单和程序结果的部分)六通讯录管理系统程序说明:本程序属于非数值计算型算法设计,学生需要设计出通讯录管理系统所需要的基本功能,并设计简单的界面(无需图形化)。
本程序主要考察对自定义函数的熟悉程度,本程序中主要使用到的是链表的相关操作,包括链表的创建、输入、输出、查找、插入、删除等操作,需要对结构体及链表有比较深入的掌握。
设计要求:(1)通过提示菜单选择可以进行的操作。
(2)将人员的信息存入文件中,并命名为PersonInfo.txt。
(3)在本系统中可以进行管理系统包含的基本操作,其中包括a) 查看所有人员的信息b) 输入一个人员的人员号,从当前人员中进行查找,如果找到则显示该人员的相关信息,如果没有找到则给出提示信息c) 添加一个人员的基本信息,通过输入人员号,首先查找是否存在该人员号的人员,如果存在则提示重新输入,否则将该人员按照顺序插入到相应位置d) 删除一个人员的基本信息,通过输入人员号,首先查找是否存在该人员号的人员,如果存在则将该人员删除,否则给出提示信息,提示该人员不存在(4)人员基本信息包括人员号、姓名、性别、生日、电话和所在地这些简单信息。
试论大学C语言教学问题及改进对策研究一、当前高校C 语言教学现状高校计算机专业C 语言教学是程序设计课程中的基础, 特别是在理工类学科中,C 语言已经成为必修课之一。
另外, 对于其他程序设计语言, 如aB is 。
语言、oF xP r 。
语言多为文管类及艺术类学生的必修课。
我们从近年来理工类高校C 语言教学现状来看,由于C语言是面向过程的程序设计, 在教学中比较注重对研究对象、计算机算法的考查, 再加之C 语言语法灵活, 各类运算符极为丰富, 学生在学习过程中面临更多的疑难问题, 很多学生反映C 语言学习枯燥而难懂。
事实上, 对于C 语言本身来说,由于知识点基础性较强, 在课时相对少的条件下,C 语言在技能掌握上确实有难度, 课时少, 教学进度快, 学生在认知和应用上不易掌握。
如果教师放慢教学进度, 其他教学内容难以完成, 时间短也是造成C 语言学习被动的重要因素。
计算机专业基础理论课还有数据结构, 微机原理,以及C + + 程序设计语言, 也给学生带来学习压力。
二、高校c 语言教学中的问题及相应对策研究高校C 语言课程教学本身就是基础性与实践性相结合的过程,对于c 语言教学中的问题, 要善于从归纳与总结中进行分析, 并从教学实施中灵活应对, 发挥学生在C 语言学习中的积极性, 增强学生对C 语言的理解和应用能力, 提升C 语言课程教学质量。
( 一) 语言学科定位对于C 语言教学多在大学一年级开设, 并作为计算机基础理论课程之一, 很多学生还未认识到计算机素养的意义, 特别是刚踏人校门, 很多学生对计算机是零起点学习。
因此,从学科专业视角,要引导学生认识C 语言课程, 必然需要明确C 语言教学的定位问题。
对于C 语言教学计划与教学方案的制定, 教师要明白 C 语言的学习难度, 考虑到计算机专业学生间的专业知识差异性, 对于突然接受难度较高的理论学习, 要增强学生的学习信心, 针对常见的C 语言教学难点问题, 一方面要从教学侧重点上给予梳理并针对性讲解,另一方面从学习层次上, 鼓励学生循序渐进的掌握, 避免因过高的教学起点而阻碍学生对 C 语言的学习热情。
同济大学二○一一~二○一二学年第二学期交通运输工程学院课程设计报告书课程名称:C/C++语言课程设计班级:4班学号:********名:***指导教师:***二○一二年六月一.需求分析程序名称:通讯录管理程序。
程序功能概括:1)添加:即增加一个人的记录到通信录中2)显示:即在屏幕上显示所有通信录中的人员信息,应能分屏显示。
3)查询:可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码和邮政编码。
4)修改:可修改一个人的除姓名外其它信息。
5)分类并显示:可将人员进行分组,例如分为家人,朋友,同事等,选择分组后,只显示该分组内的信息6)装入:即将文件中的信息读入程序。
7)存储:即将通讯录信息保存在一个文件中。
8)删除:删除通讯录中的联系人。
程序意义:通讯录管理系统针对手机中对联系人的添加,删除等操作,方便用户使用通讯录,起到便利作用。
二.概要设计系统核心功能:➢添加联系人➢显示所有联系人信息➢查询联系人并显示➢删除联系人➢分组并显示➢修改联系人信息功能框图:功能描述:➢ 插入联系人:通过键盘输入联系人的姓名,电话号码,地址,邮政编码等信息,存入通讯录中。
➢ 显示联系人:在屏幕上分行显示所有联系人的信息。
➢ 删除联系人:通过输入需要删除的联系人的姓名删除该联系人。
➢ 查询联系人:通过输入需要查询的联系人的姓名查询该联系人。
➢ 载入数据:从文件读出数据。
➢ 保存数据:将数据保存入文件。
➢ 分组并显示:1.创建新组:创建新的分类。
2.组内添加联系人:将联系人添加入该组。
3:。
分组显示:在屏幕上分组显示联系人。
三. 详细设计本程序用了如下课本中没有的函数,使界面简洁明了。
getch ()//键盘任意输入system (“CLS ”)//清屏如下为完整程序:#include"iostream.h"#include"string.h"#include"iomanip"#include"stdlib.h"#include"stdio.h"#include"conio.h"#include"iomanip.h"struct ben//定义结构{char name[20];char address[80];char num[20];char you[10];char fen[10];struct ben *next;};struct ben *head=NULL;//定义全局变量char *lei[20];int i(0);void csh(){for(int i=0;i<20;i++)lei[i]=NULL;}void menu();void duru()//读入数据{system("CLS");FILE *fp;if((fp=fopen("txl.txt","r+"))==NULL){cout<<"can't open file";exit(1);}head=new ben;struct ben *newben;struct ben *tail;tail=head;while(!feof(fp)){newben=new ben;fread(newben,sizeof(ben),1,fp);tail->next=newben;tail=newben;}tail->next=NULL;cout<<"读取文件成功"<<endl;fclose(fp);cout<<"返回主菜单请安任意键"<<endl;getch();menu();}void baocun()//保存数据{system("CLS");FILE *fp;if((fp=fopen("txl.txt","r+"))==NULL){cout<<"can't open file";exit(1);}if(head==NULL)cout<<"内容空,无需保存"<<endl;else{struct ben*p=head->next;while(p!=NULL){fwrite(p,sizeof(ben),1,fp);p=p->next;}cout<<"保存成功"<<endl;}cout<<"返回主菜单请安任意键"<<endl;getch();menu();}void tianjia()//添加联系人{char n;do{system("CLS");struct ben *newben;newben=new ben;strcpy(newben->fen,"wu");cout<<"请输入姓名"<<endl;cin>>newben->name;cout<<"请输入地址"<<endl;cin>>newben->address;cout<<"请输入电话号码"<<endl;cin>>newben->num;cout<<"请输入邮政编码"<<endl;cin>>newben->you;if(head==NULL){head=new ben;head->next=newben;newben->next=NULL;}else{newben->next=head->next;head->next=newben;}cout<<"添加完成,若想继续添加请按1,返回主菜单请按任意键"<<endl;n='0';cin>>n;}while(n=='1');system("CLS");menu();}void print()//输出通讯录列表{system("CLS");struct ben *p=head;if(head==NULL){cout<<"联系人为空,回到主页请按任意键"<<endl;getch();menu();}else{p=p->next;cout<<"姓名"<<setw(10)<<"地址"<<setw(10)<<"电话号码"<<setw(10)<<"邮政编码"<<endl;while(p!=NULL){cout<<p->name<<setw(10)<<p->address<<setw(10)<<p->num<<setw(10)<<p-> you<<endl;p=p->next;}cout<<"输出完毕,返回主菜单请按任意键"<<endl;getch();menu();}}void change()//修改联系人信息{system("CLS");if(head==NULL){cout<<"联系人为空,回到主页请按任意键"<<endl;getch();menu();}else{struct ben *p=head->next;cout<<"请输入修改人的姓名"<<endl;char name1[20];cin>>name1;while(p!=NULL&&strcmp(name1,p->name))p=p->next;if(p!=NULL){cout<<"进行修改"<<endl;cout<<"请输入地址"<<endl;cin>>p->address;cout<<"请输入电话号码"<<endl;cin>>p->num;cout<<"请输入政编码"<<endl;cin>>p->you;cout<<"修改成功"<<endl;cout<<"返回主菜单请按任意键"<<endl;getch();menu();}else{cout<<"不存在此人,返回主菜单请按任意键"<<endl;getch();menu();}}}void cz()//创建类{system("CLS");char j;if(head==NULL){cout<<"联系人为空,回到主页请按任意键"<<endl;getch();menu();}else{cout<<"请输入您要创建的新组"<<endl;char s[10];cin>>s;lei[i]=new char[10];strcpy(lei[i],s);i++;do{system("CLS");cout<<"请选择要您要添加入该类的人(输入人名)"<<endl;struct ben *p=head->next;cout<<"姓名"<<setw(10)<<"地址"<<setw(10)<<"电话号码"<<setw(10)<<"邮政编码"<<setw(10)<<"分类"<<endl;while(p!=NULL){cout<<p->name<<setw(10)<<p->address<<setw(10)<<p->num<<setw(10)<<p-> you<<setw(10)<<p->fen<<endl;p=p->next;}p=head->next;char name2[20];cin>>name2;while(p!=NULL&&strcmp(name2,p->name)!=0)p=p->next;if(p!=NULL){strcpy(p->fen,s);cout<<"已成功将"<<p->name<<"添加入"<<s<<"中"<<endl;}elsecout<<"不存在这个人"<<endl;cout<<"继续添加请按1.后退请按2.返回主菜单请按其它键."<<endl;cin>>j;}while(j=='1');if(j=='2')cz();else{menu();}}}void zt()//在类中添加联系人{system("CLS");int x(0);for(x=0;x<20;x++){if(lei[x]==NULL)break;}if(x==0){cout<<"木有类,返回添加类请按任意键"<<endl;getch();cz();}char d;do{system("CLS");d=0;for(int j=0;j<x;j++)cout<<j+1<<" : "<<lei[j]<<" ";cout<<"请选择添加的组"<<endl;int k;cin>>k;cout<<"您要添加的组为"<<lei[k-1]<<endl;cout<<"情输入您要添加的人"<<endl;struct ben *p=head->next;cout<<"姓名"<<setw(10)<<"地址"<<setw(10)<<"电话号码"<<setw(10)<<"邮政编码"<<setw(10)<<"分类"<<endl;while(p!=NULL){cout<<p->name<<setw(10)<<p->address<<setw(10)<<p->num<<setw(10)<<p-> you<<setw(10)<<p->fen<<endl;p=p->next;}p=head->next;char name2[20];cin>>name2;while(p!=NULL&&strcmp(name2,p->name)!=0)p=p->next;if(p!=NULL){strcpy(p->fen,lei[k-1]);cout<<"已成功将"<<p->name<<"添加入"<<lei[k-1]<<"中"<<endl;}elsecout<<"不存在这个人"<<endl;cout<<"继续添加请按1.返回主菜单请按其他它键."<<endl;cin>>d;}while(d=='1');menu();}void lx()//分类显示{system("CLS");if(head==NULL){cout<<"通讯录为空,返回主菜单请按任意键"<<endl;getch();menu();}int x(0);for(x=0;x<20;x++){if(lei[x]==NULL)break;}if(x==0){cout<<"木有类,返回主菜单请按任意键"<<endl;getch();menu();}else{for(int m=0;m<x;m++){struct ben *p=head->next;cout<<lei[m]<<endl;cout<<"姓名"<<setw(10)<<"地址"<<setw(10)<<"电话号码"<<setw(10)<<"邮政编码"<<endl;while(p!=NULL){if(strcmp(p->fen,lei[m])==0){cout<<p->name<<setw(10)<<p->address<<setw(10)<<p->num<<setw(10)<<p-> you<<endl;}p=p->next;}cout<<endl;}cout<<"返回主菜单请任意键"<<endl;getch();menu();}}void fenlei()//分类显示总表{system("CLS");cout<<"1.创建新组"<<endl;cout<<"2.分组添加"<<endl;cout<<"3.分类显示"<<endl;cout<<"4.返回主菜单"<<endl;char c;cin>>c;switch (c){case '1':csh();cz();break;case '2':zt();break;case '3':lx();break;case '4':menu();default:cout<<"wrong";}}void shanchu()//删除联系人{if(head==NULL)cout<<"通讯录为空"<<endl;else{char k='0';do{system("CLS");cout<<"请选择要您要删除的人(输入人名)"<<endl;struct ben *p=head->next,*q;q=head;cout<<"姓名"<<setw(10)<<"地址"<<setw(10)<<"电话号码"<<setw(10)<<"邮政编码"<<endl;while(p!=NULL){cout<<p->name<<setw(10)<<p->address<<setw(10)<<p->num<<setw(10)<<p-> you<<endl;p=p->next;}p=head->next;char name2[20];cin>>name2;while(strcmp(p->name,name2)!=0&&p!=NULL){p=p->next;q=p;}if(p!=NULL){q->next=p->next;delete(p);}elsecout<<"木有这个人"<<endl;cout<<"继续删除请按1.回到主菜单请按其它键"<<endl;cin>>k;}while(k=='1');getch();menu();}}void search()//查询联系人{char n;do{system("CLS");cout<<"请输入查询人的姓名"<<endl;char name1[20];struct ben *p=head;if(p==NULL){cout<<"联系人为空,回到主页请按任意键"<<endl;getch();menu();}elsep=p->next;cin>>name1;while(p!=NULL&&strcmp(p->name,name1)!=0){p=p->next;}if(p!=NULL){cout<<"姓名"<<setw(10)<<"地址"<<setw(10)<<"电话号码"<<setw(10)<<"邮政编码"<<endl;cout<<p->name<<setw(10)<<p->address<<setw(10)<<p->num<<setw(10)<<p-> you<<endl;}elsecout<<"木有此人"<<endl;cout<<"继续查询请按1,回到主页面请按任意键";n='0';cin>>n;}while(n=='1');system("CLS");menu();}void menu()//主菜单{system("CLS");cout<<" 欢迎使用通讯录系统"<<endl;cout<<"1.添加联系人"<<endl;cout<<"2.显示联系人信息"<<endl;cout<<"3.查询联系人"<<endl;cout<<"4.修改联系人信息"<<endl;cout<<"5.分组并显示"<<endl;cout<<"6.载入数据"<<endl;cout<<"7.保存电话本"<<endl;cout<<"8.删除联系人"<<endl;cout<<"9.退出"<<endl;char choose;do{cin>>choose;switch(choose){case '1':tianjia();break;case '2':print();break;case '3':search();break;case '4':change();break;case '5':fenlei();break;case '6':duru();break;case '7':baocun();break;case '8':shanchu();break;case '9':exit(1);break;default:cout<<"请输入正确数字"<<endl;}}while(choose!='8');}void main()//主函数{menu();}四.调试分析过程描述1、本程序采用结构链表类型结合功能函数的方式运行,代码简单易懂。
CHANGZHOU INSTITUTE OF TECHNOLOGY课 程 设 计 说 明 书课程名: 《C 语言大作业》题 目: 通 讯 录 管 理 系 统二级学院: 计算机信息工程学院专 业: 软件工程 班 级: 12 软 件 卓 越 学 号: 12030427 姓 名: 许 彦 文 指导教师: 曹 中 心2013年 7 月KC021-11.课程认识目的:加深对《C程序设计》课程所学知识的理解,进一步巩固C语言的编程方法。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力,加强动手能力。
任务:根据要求电话簿数据以文本文件存放在文件中,并按要求实现通讯录最基本的功能。
2.课题选择在这个信息化时代,手机已成为最通俗的交流工具,通讯录日常生活中不可缺少的,且编写此系统中要用到的函数大多数是我们学过的,在我们的能力掌握范围内,一开始我们也只想到了通讯录的基本功能,后来我们通过各方面的努力,尽量使整个系统的功能更加齐全。
3.见组长(王扣慈)4.模块详细设计我负责的是注册、添加、删除的功能。
注册:运行此功能时,有用户名限制(仅限字母)、密码限制(仅限数字或字母),注册时密码要输出两次但如果第二次输密码时输错超过两次就意味着注册失败。
(如图4-1)添加:加入你所需要的数据,数据包括姓名、电子邮箱、电话号码、分类、编号。
(如图4-2)删除:输入名字,找到欲删除的那个人的名字后,会自动删除他(她)的记录内容。
(如图4-3)图4-1 注册用户流程图图4-2 添加用户流程图图4-3删除用户流程图5.主要实现方法我编写的最重要的应该是注册,而注册中最重要的就是实现用户名、密码的权限 void zhuce( ) { FILE *fp;if((fp=fopen("mima.dat","wb"))==NULL) //建一个新的文件夹 { printf("cannot open file!\n"); exit(0);}int sign=1; int k=1;Yint j,i=1;int m=1;int len=0;char code1[N],code2[N],user[N];printf("用户名仅限于字母"); //设定用户名权限while(m!=0) //用户名如果不符合要求就继续输入,输对就跳出循环{printf("\n输入用户名\n");getchar();gets(user);len=strlen(user);for(j=0;j<len;j++){if(!((user[j]>='a'&&user[j]<='z')||(user[j]>='A'&&user[j]<='Z'))){m=1;printf("用户名格式不符,请重新输入");}else m=0;}}printf("密码权限仅限数字或字母"); //设定密码权限while(k!=0) //密码不符合要求就继续输入,输对就跳出循环{printf("输入密码\n");gets(code1);len=strlen(code1);for(j=0;j<len;j++){if(!((code1[j]>='a'&&code1[j]<='z')||(code1[j]>='A'&&code1[j]<='Z')||(code1[j]>='0'& &code1[j]<='9'))){k=1;printf("密码格式不符,请重新输入\n");}else k=0;}}while(sign!=0){printf("再输入一次密码\n");//再输入一次密码看两次是否一样gets(code2);if(!strcmp(code1,code2)){printf("注册成功\n");//两次输出密码相等,就注册成功sign=0;}else{sign=1;printf("密码出错,与第一次不符");i++;}if(i>3){printf("\n你已经超过2次输错密码,已无法输入,再见");break; //如果超过两次输错密码,系统将会阻止再次输入}}fputs(user,fp);fputs(code1,fp);//将输入的用户名,密码存放到文件夹中,以便用于登陆fclose(fp);}6.课程设计总结问题:我出现的问题主要还是出现在注册中,其他两个程序虽然也有问题,但都能通过自己和小组成员之间的交流慢慢解决,类如在添加时选择是否继续添加下去时,运行时系统会不理你的选择继续叫你加下去,然后和小组成员讨论后在选择是否添加前面加了个getchar()问题就解决了。
摘要深对《C语言》课程所学知识的理解,进一步巩固C语言编程方法。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力,加强动手能力。
设计一个简易的手机通讯录管理系统。
该题目要求在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。
进一步掌握各种函数的应用,包括时间函数、绘图函数,以及文件的读写操作等。
其中结构体,函数的调用,算法的设计是尤为重要的。
在本实验中应用Visual C++软件来实现试验的最终的结果。
本系统在开发过程中,注意使其符合操作的业务流程,并力求系统的全面性、通用性,使得本系统不只适用于一家教育机构。
在开发方法的选择上,选择了生命周期法与原型法相结合的方法,遵循系统调查研究、系统分析、系统设计和系统实施四个主要阶段进行设计,而在具体的设计上,采取了演化式原型法,随着用户的使用及对系统了解的不断加深,对某一部分或几部分进行重新分析、设计、实施。
本论文主要从系统分析、系统设计、系统实施与使用等几个方面进行介绍。
关键词:C语言数据类型运算类型程序结构绪论 (1)1 概要设计 (2)1.1 设计题目及要求 (2)1.2 总体设计 (2)1.3 总体模块设计 (2)2 软件介绍 (2)2.1 运行环境 (3)3 方案提出及功能要求 (4)4 通讯录工作流程图 (4)4.1 系统调式 (7)4.2 主界面 (8)4.3 增加记录 (9)4.4 显示记录 (9)4.5 删除记录 (10)4.6 查询记录 (10)4.7 修改记录 (11)4.8 保存记录 (11)4.9 退出记录 (12)5 设计方案论证 (12)5.1 设计思路 (12)5.2 程序设计 (13)5.2.1 主函数及其流程图 (13)6 设计过程所遇到问题及解决方法 (14)结束语 (16)致谢 (17)参考文献 (18)附录1 通讯录系统程序代码 (19)纸质的通讯录已经不能满足我们的要求,更新麻烦,查询困难等缺点是纸质通讯录所不能克服的。
c语言通讯录管理系统课程设计概述及范文1. 引言1.1 概述本文旨在介绍和讨论C语言通讯录管理系统的课程设计。
通讯录管理系统是一个常见的应用程序,它能够帮助用户有效地存储和管理个人联系人信息。
在这个课程设计中,我们将使用C语言来实现这样一个功能齐全的通讯录管理系统。
1.2 文章结构本文分为四个主要部分:引言、C语言通讯录管理系统、课程设计要点以及结论与展望。
首先,在引言部分,我们将简要介绍文章的背景和目的,并概述文章的结构。
其次,在C语言通讯录管理系统部分,我们将详细介绍该系统的功能、设计思路和方法以及实现过程和技术选型。
然后,在课程设计要点部分,我们将重点阐述需求分析与设计准备工作、功能实现与代码编写方法以及界面设计与用户交互优化方法。
最后,在结论与展望部分,我们将对整个课程设计进行总结评价,提出存在问题及改进方向,并探讨该系统的发展前景与应用推广建议。
1.3 目的本次课程设计旨在通过实际动手编写C语言通讯录管理系统来巩固和应用我们在课堂上学到的知识。
通过这个项目,我们将学习如何进行需求分析、系统设计以及代码编写等方面的技能,并掌握C语言在实际应用中的使用方法。
同时,我们还将培养解决问题、优化用户体验以及具备良好代码风格和团队协作能力的能力。
通过完成这个课程设计,我们将为今后的编程工作打下坚实的基础。
2. C语言通讯录管理系统:2.1 系统功能介绍:C语言通讯录管理系统是一个基于C语言开发的应用程序,旨在帮助用户有效地管理和组织联系人信息。
该系统具有以下主要功能:- 添加联系人:用户可以输入姓名、电话号码、电子邮件等详细信息来添加新的联系人。
- 查找联系人:根据关键字进行搜索,快速定位到指定联系人的信息。
- 编辑联系人:允许用户修改已有联系人的信息,如更新电话号码或电子邮件地址。
- 删除联系人:提供删除指定联系人及其相关信息的选项。
- 显示所有联系人:以列表形式展示所有已存储的联系人详细信息。
基于C语⾔实现个⼈通讯录管理系统之前利⽤C语⾔完成了⼀个关于个⼈通讯录管理系统的课题,主要是关于联系⼈的添加、查找、删除、修改、输出以及⽂件的写⼊与读出,还有⼀个甜点功能—模拟通话,它的实现原理也很容易理解,⽂章末尾会介绍到。
主框架:1、函数声明关于这⾥的函数声明,主要是为了可以清楚的了解整个系统的功能,这⾥不做过多介绍。
还有结构体链表的创建,贯穿了各个功能代码部分,必不可少。
2、联系⼈的添加这部分主要涉及联系⼈的姓名、地址、电话、QQ号和邮箱(当然需要其他功能可⾃⾏添加),考虑到数组操作不便前提下,使⽤链表的尾插法,通过不断开创新的结点,然后不断将新的结点的地址指向尾结点,使尾结点不断后移,⽽新创的结点时按照添加的先后顺序进⾏连接(参考下图可快速理解,此图⽚来源于⽹络),当然其中某些项的条件限制也是必不可少的。
⽐如:电话、QQ号、邮箱int Addpeo() //添加联系⼈{int t,n,a;char flag='y'; //仅作为第⼀次执⾏条件ptcs p=head,q;while(flag!='n'&&flag!='N') //判断是否继续添加{q=(ptcs)malloc(sizeof(pcs)); //申请内存p->next=q; //赋予下⼀个节点p=q;q->next=NULL; //尾结点地址赋空值,尾插法printf("\n\t请输⼊:\n");printf("\t\t姓名:");scanf("\t\t%s",q->);printf("\t\t地址:");scanf("\t\t%s",q->chat.add);printf("\t\t⼿机号:");scanf("\t\t%s",q->chat.tel);do{n=0; //仅做记录if(strlen(q->chat.tel)!=11) //计算⼿机号的长度,判断是否输⼊规范 {n=1;printf("\t\t您输⼊的⼿机号格式不存在,请重新输⼊:");scanf("\t\t%s",q->chat.tel);}else{for(t=0;t<11;t++){if(q->chat.tel[t]<'0'||q->chat.tel[t]>'9'){n=1;printf("\t\t您输⼊的⼿机号格式不合理,请重新输⼊:");scanf("\t\t%s",q->chat.tel);break;}}}}while(n);//输⼊QQ号printf("\t\tQQ号:");scanf("\t\t%s",q->chat.tecent);do{n=0;if(strlen(q->chat.tecent)>10) //以10位QQ号为准,判断是否符合规范 {n=1;printf("\t\t您输⼊的QQ号格式不存在,请重新输⼊:");scanf("\t\t%s",q->chat.tecent);}else{for(t=0;t<10;t++){if(q->chat.tecent[t]<'0'||q->chat.tecent[t]>'9'){n=1;printf("\t\t您输⼊的QQ号格式不合理,请重新输⼊:");scanf("\t\t%s",q->chat.tecent);break;}}}}while(n);//输⼊邮箱printf("\t\tEmail:");scanf("\t\t%s",q->chat.email);do{//判断邮箱 @符号输⼊规范(这⾥不限定邮箱号码位数)a=0;for(t=0;q->chat.email[t]!='\0';t++){if(q->chat.email[t]=='@')a++; //@数为1}if(a!=1){printf("\t\t输⼊的邮箱格式不合理,请重新输⼊:");scanf("\t\t%s",q->chat.email);}}while(a!=1); //是否输⼊@ ,为1则终⽌循环printf("\n\t是否继续添加?(Y/N)");scanf("\t%c",&flag);}return 0;}3、联系⼈的查询这步使⽤的是遍历查询,共设置了三种⽅式,在定义链表指针的前提下,通过遍历链表进⾏信息的对⽐,从⽽判断联系⼈是否存在,如果存在就直接显⽰给⽤户,不存在就直接退回功能选项。
C语言大作业——学生通讯录管理系统#include#include//#define NULL 0#define LEN sizeof(struct message)struct message //定义结构体{char name[15];char number[15];char phone[15];char qq[13];char addr[25];struct message *next; //指向下一数据};int n;void creat() //建立电话簿{int num;char choice[5]={'2'};FILE *fp;struct message *head;struct message *p,*q;n = 0;p = q = (struct message *) malloc(LEN);fp=fopen("通讯录1.txt","wb");system("cls");printf("\n请输入姓名:");scanf("%s",p->name);printf("\n请输入电话号码:");scanf("%s",p->phone);printf("\n请输入学号:");scanf("%s",p->number);printf("\n请输入QQ:");scanf("%s",p->qq);printf("\n请输入住址:");scanf("%s",p->addr);fwrite(p,LEN,1,fp);fclose(fp);head = 0;num = 1;while(num!=0){n = n+1;if(n==1) head = p;else q->next = p;q = p;p = (struct message *) malloc(LEN); //分配存储区while(choice[0]!='1' && choice[0]!='0') //判断是否继续{printf("\n1 继续输入\n 0 返回\n");printf("请选择操作:");scanf("%s",choice);}switch(choice[0]){case '1':{fp=fopen("通讯录1.txt","rb");system("cls");printf("\n请输入姓名:");scanf("%s",p->name);printf("\n请输入电话号码:");scanf("%s",p->phone);printf("\n请输入学号:");scanf("%s",p->number);printf("\n请输入QQ:");scanf("%s",p->qq);printf("\n请输入住址:");scanf("%s",p->addr);fwrite(p,LEN,1,fp);fclose(fp);choice[0] = '2';} continue;case '0': num = 0;system("cls");}}q->next = 0;}void add() //添加通讯录{int num;char choice[5]={'2'};FILE *fp;struct message *head;struct message *p,*q;n = 0;p = q = (struct message *) malloc(LEN); //分配空间fp=fopen("通讯录1.txt","ab");system("cls");printf("\n请输入姓名:"); //输入内容scanf("%s",p->name);printf("\n请输入电话号码:");scanf("%s",p->phone);printf("\n请输入学号:");scanf("%s",p->number);printf("\n请输入QQ:");scanf("%s",p->qq);printf("\n请输入住址:");scanf("%s",p->addr);fwrite(p,LEN,1,fp);fclose(fp);head = 0;num = 1;while(num!=0){n = n+1;if(n==1) head = p;else q->next = p;q = p;p = (struct message *) malloc(LEN); //分配空间while(choice[0]!='1' && choice[0]!='0') //判断是否继续{printf("\n1 继续输入\n 0 返回\n");printf("请选择操作:");scanf("%s",choice);}switch(choice[0]){case '1':{fp=fopen("通讯录1.txt","rb");system("cls");printf("\n请输入姓名:");scanf("%s",p->name);printf("\n请输入电话号码:");scanf("%s",p->phone);printf("\n请输入学号:");scanf("%s",p->number);printf("\n请输入QQ:");scanf("%s",p->qq);printf("\n请输入住址:");scanf("%s",p->addr);fwrite(p,LEN,1,fp);fclose(fp);choice[0] = '2';} continue;case '0': num = 0;system("cls");}}q->next = 0;}void findname(struct message * fphead) //按姓名查找{ struct message *p;int a = 0;char findname[20];system("cls");printf("请输入要查找的姓名:\n");scanf("%s",findname);for(p=fphead->next;p!=NULL;p=p->next){if(strcmp(p->name,findname)==0){printf("姓名电话号码学号QQ 住址\n");printf("%-15s %-15s %-15s %-13s %-25s\n",p->name,p->phone,p->number,p->qq,p->addr);a = 1;}}if(a != 1)printf("无此通讯录!\n");}void findphone(struct message * fphead) //按电话查找{struct message *p;int a = 0;char findphone[15];system("cls");printf("请输入要查找的电话:\n");scanf("%s",findphone);for(p=fphead->next;p!=NULL;p=p->next){if(strcmp(p->phone,findphone)==0){printf("姓名电话号码学号QQ 住址\n");printf("%-15s %-15s %-15s %-13s %-25s\n",p->name,p->phone,p->number,p->qq,p->addr);a = 1;}}if(a != 1)printf("无此通讯录!\n");}void findnumber(struct message * fphead) //按学号查找{struct message *p;int a = 0;char findnumber[15];system("cls");printf("请键入要查找的学生学号:\n");scanf("%s",findnumber);for(p=fphead->next;p!=NULL;p=p->next){if(strcmp(p->number,findnumber)==0){printf("姓名电话号码学号QQ 住址\n");printf("%-15s %-15s %-15s %-13s %-25s\n",p->name,p->phone,p->number,p->qq,p->addr);a = 1;}}if(a != 1)printf("无此通讯录!\n");}void modify(struct message * fphead) //修改记录{FILE *fp;struct message *p,*q;int a = 0;char findname[15];system("cls");printf("请键入要查找的姓名:\n");scanf("%s",findname);for(p=fphead->next;p!=NULL;p=p->next){if(strcmp(p->name,findname)==0){printf("姓名电话号码学号QQ 住址\n");printf("%-15s %-15s %-15s %-13s %-25s\n\n\n\n",p->name,p->phone,p->number,p->qq,p->addr);printf("\n请键入新姓名:");scanf("%s",p->name);printf("\n请键入新电话号码:");scanf("%s",p->phone);printf("\n请键入新学号:");scanf("%s",p->number);printf("\n请键入新QQ:");scanf("%s",p->qq);printf("\n请键入新住址:");scanf("%s",p->addr);fp = fopen("通讯录2.txt","wb");q = fphead->next; //P为链表头指针while(q!=0){fwrite(q,LEN,1,fp);if(q->next!=0)q = q->next;elseq = 0;}fclose(fp);unlink("通讯录1.txt"); //用新文件覆盖原文件rename("通讯录2.txt", "通讯录1.txt");printf("修改成功!");a = 1;}}if(a != 1)printf("无此通讯录!\n");}void del(struct message * fphead) //删除记录{FILE *fp,*fq;struct message *p,*q,*r;char sname[15];p = q = (struct message *) malloc(LEN);p = fphead;system("cls");fp = fopen("通讯录1.txt","rb");fq = fopen("通讯录2.txt","wb");printf("请输入欲删除记录的姓名:");scanf("%s",sname);while(strcmp(p->name,sname)!=0 && p->next!=0) //查找节点并删除该节点q = p;p = p->next;}if(strcmp(p->name,sname)==0){if(p==fphead)fphead = p->next;else{q->next = p->next;}r = fphead->next; //r为链表头指针while(r!=0){fwrite(r,LEN,1,fq);if(r->next!=0)r = r->next;elser = 0;}printf("删除成功!");}else{printf("无此通讯录!");}fclose(fp);fclose(fq);unlink("通讯录1.txt"); //用新文件覆盖原文件rename("通讯录2.txt", "通讯录1.txt");}struct message * open(void) //打开文件,载入链表{FILE *fp;struct message *p=NULL,*q=NULL,*temp=NULL,*fphead=NULL;fp=fopen("通讯录1.txt","rb");fphead=(struct message *)malloc(LEN); //分配空间temp = q = fphead;while(! feof(fp)) //循环读取,载入链表p=(struct message *)malloc(LEN);temp=q;q->next=p;q=p;fread(p,LEN,1,fp);}temp->next=NULL;fclose(fp);return(fphead); //返回链表头指针}void print() //显示通讯录{struct message *p;FILE *fp;system("cls");if((fp=fopen("通讯录1.txt","rb"))!=NULL){printf("姓名电话号码学号QQ 住址\n");p = (struct message *)malloc(LEN); //分配空间while(!feof(fp)){fread(p,LEN,1,fp);printf("%-15s %-15s %-15s %-13s %-25s\n",p->name,p->phone,p->number,p->qq,p->addr);}fclose(fp);else{printf("未建立通讯录!");}}void main() //主函数{FILE * fp;struct message * fphead;int begin = 1,f;char choice[5];while(begin == 1){printf("\t\t>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>\n");printf("\t\t\t\t欢迎使用学生通讯录\n");printf("\t\t<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<\n\n\n");printf("\t\t\t*主窗口菜单*\n\n");printf("\t\t\t1:显示通讯录中所有记录;\n\n");printf("\t\t\t2:建立新通讯录;\n\n");printf("\t\t\t3:添加新记录;\n\n");printf("\t\t\t4:查询通讯录中的记录;\n\n");printf("\t\t\t5:修改通讯录中的记录;\n\n");printf("\t\t\t6:删除通讯录中的记录;\n\n");printf("\t\t\t0:退出通讯录\n\n");printf("请选择操作:");scanf("%s",choice);switch(choice[0])case '1':{print();printf("按任意键返回主菜单!\n");getch();system("cls");} continue;case '2':{creat();} continue;case '3':{add();} continue;case '4':{if((fp = fopen("通讯录1.txt","rb")) != NULL){fclose(fp);system("cls");printf("1按姓名查询;\n2按电话查询;\n3按学号查询;\n"); printf("请输入查询方式:");scanf("%d",&f);if(f==1){fphead = open();findname(fphead);}if(f==2){fphead = open();findphone(fphead);}else if(f==3){fphead = open();findnumber(fphead);}}else{system("cls");printf("未建立通讯录!");}printf("按任意键返回主菜单!\n");getch();system("cls");} continue;case '5':{if((fp = fopen("通讯录1.txt","rb")) != NULL) {fclose(fp);fphead = open();modify(fphead);}else{printf("未建立通讯录!");}printf("按任意键返回主菜单!\n");getch();system("cls");}continue;case '6':{if((fp = fopen("通讯录1.txt","rb")) != NULL) {fclose(fp);fphead = open();del(fphead);}else{system("cls");printf("未建立通讯录!");}printf("按任意键返回主菜单!\n");getch();system("cls");} continue;case '0': exit(0);default:{system("cls");printf("输入错误,按任意键返回主菜单!\n"); getch();}}}system("pause"); }。
c语言通讯录设计总结与致谢总结这个课题是设计一个通讯录系统,该通讯系统能够较好的管理好我们的通讯录记录,也拥有比较完善的功能,但是该系统依旧有漏洞,此程序必须按照系统提示的操作来执行,不然的话就会使程序进入死循环,比如,如果我输入字符串的长度过长的话,程序就会终止运行了,并且还没有提示;后面的删除模块所用的方法是用空格替代,虽然可以删除,但达不到理想的效果。
在编写过程中,我逐步的了解了程序模块化设计的思想含义。
在整个程序设计的过程中语法的错误还是比较容易检查的,但是对于那些逻辑思维的问题方面的缺陷不易查出,因此常常出现系统提示没有错误但是仍然不能够正常运行的境况,尽管有很多不足之处,但我在整个系统程序设计的过程中,我可以感受到自己对C语言有了一定的掌握,对整体的把握度也提高了很多。
此外编程是一项高精度的工作,所以我们要有规范化,标准化的代码编写习惯,良好的编写习惯,不但有助于代码的纠错,也有助于不同人员之间的协作。
我们还要有模块化思维能力,模块化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大的避免重复性的工作。
另外我们要重视程序的算法,在程序中,算法是灵魂,我们要努力学习各种先进的算法,提高自己的编程能力。
致谢光阴荏苒,大学生活即将结束,四年的学习生活使我受益匪浅。
经历大半年时间的磨砺,毕业论文最后完稿,回首大半年来收集、整理、思索、停滞、修改直至最终完成的过程,我得到了许多的关怀和帮忙,此刻要向他们表达我最诚挚的谢意。
首先,我要深深感谢我的导师xxx老师。
X老师为人谦和,平易近人。
在论文的选题、搜集资料和写作阶段,X老师都倾注了极大的关怀和鼓励。
在论文的写作过程中,每当我有所疑问,X老师总会放下繁忙的工作,不厌其烦地指点我;在我初稿完成之后,X老师又在百忙之中抽出空来对我的论文认真的批改,字字句句把关,提出许多中肯的指导意见,使我在研究和写作过程中不致迷失方向。
C语言实训报告范文(手机通讯录)根据需求,该系统所应实现的功能有以下一些:各种基本数据的录入。
如:通讯录基本信息录入。
显示全部记录功能。
可以查看通讯录中的全部记录。
模糊查找功能。
例如输入“张”,则分条显示全部姓“张”的信息,直到用户确认显示信息为用户所要找的信息,或者提示:通讯录中没有该信息。
模糊删除功能:与模糊查找类似,可以只知道信息的某部分,进而查找所要删除的信息,并由用户确认是否删除。
模糊修改功能:与其他模糊功能类似,可以只知道信息的某部分,进而查找所要修改的信息,并由用户确认是否修改图1.1通讯录功能需求2、系统设计2.1总体设计采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。
需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。
可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。
若选择1,则调用voidadd()函数,执行增加记录操作;若选择2,则调用voidmodify()函数,执行修改记录操作;若选择3,则调用tel某earch()函数,执行查询记录操作;若选择4,则调用voiddel()函数,执行删除记录操作;若选择5,则调用voidhow()函数,执行显示全部记录操作;若选择6,则调用tel某dimearch()函数,执行模糊查找操作;若选择0,则调用voidave()、voidfre(),函数,执行保存记录,并释放链表空间操作;若输入为0~6之外的值,给出选择错误的提示。
2.2.3添加记录模块程序一开始就从默认文件调用fanf()函数读入记录(若文件存在且有记录)到结构体中。
在添加每条信息时均在提示框显示有相关提示,当用户选择0退出添加记录时,系统会清屏并返回到主菜单供用户再次选择其他操作。
2.2.4查询记录模块此模块包括精确查询和模糊查询两大功能。
湖南人文科技学院计算机科学技术系课程设计说明书课程名称:C++面向对象程序设计课程代码:420103题目:通信录的设计年级/专业/班:2010级网络工程专业一班开题时间: 2011 年 6 月 13 日完成时间: 2011 年 6 月 24 日目录摘要 (1)一、引言 (2)二、设计目的与任务 (2)三、设计方案 (3)1、总体设计 (3)2、详细设计 (5)3、程序清单 (9)4、程序调试与体会 (18)5、运行结果 (19)四、结论 (21)五、致谢 (21)六、参考文献 (21)摘要C++作为大学生学习程序设计的入门语言,不仅详细介绍了语言本身,而且介绍了常用的数据结构和算法。
通过学习C++语言的数组、指针、类与对象等。
本次课程设计主要使用类与对象、数组与指针等方法.通过本次通讯录的课程设计熟悉运用C++语言,主要包括数组与指针,类与对象,string,作用域等,通过数组和指针解决数据级对象之间的联系和协调,经过类与对象的定义,建立函数等方法输入,再进行运行,最后实现通讯录中的输入、排序输出、修改、删除的功能。
关键词:类;数组;指针;C++。
AbstractC++ as college students learning program design is the beginning of the language, not only introduces the language itself, and also introduces the common data structure and algorithms. Through the study of the C++ language array pointer, class, and objects, etc. This course design main use class and object, with an array and Pointers method.Through this address book of course design familiar with using C++ language, mainly including array pointer, with classes and objects, scope and moves, through the array pointer and solve the connection between the data object level and coordination, after class and objects, such as the definition of a function method, and then to input, and realize the operation of the input and output address book sorting, modification and deletion function.Keywords: class; arrays; pointer; C++.一、引言随着我国进一步的开放,我们需要扩大国际交流,加强学习国外的先进经验。
青岛大学软件技术学院C语言程序设计实训报告姓名任XX专业软件技术班级软件技术班指导教师白伟青2011 年 7月14日目录1问题定义与描述 ................................................................................................................................ - 1 -1. 1问题定义 ............................................................................................................................................ - 1 -1. 2问题描述 ................................................................................................................................................ - 1 - 2总体设计 .................................................................................................................................................. - 1 -2.1主要功能模块 ......................................................................................................................................... - 1 -2.2数据类型定义 ......................................................................................................................................... - 2 -2.3函数定义 .............................................................................................................................................. - 2 - 3详细设计 .................................................................................................................................................. - 2 -3.1每个模块的功能 ..................................................................................................................................... - 2 -3.2流程图 ..................................................................................................................................................... - 3 - 4程序测试 .................................................................................................................................................. - 7 -4.1测试主菜单界面 ..................................................................................................................................... - 7 -4.2测试添加界面 ......................................................................................................................................... - 7 -4.3测试显示界面 ......................................................................................................................................... - 7 -4.4测试删除界面 ......................................................................................................................................... - 8 -4.5测试查询界面 ......................................................................................................................................... - 8 -4.6测试修改界面 ......................................................................................................................................... - 9 -4.7测试保存界面 ......................................................................................................................................... - 9 - 5心得体会 ................................................................................................................................................ - 10 - 6参考文献 ................................................................................................................................................ - 11 - 7附录 ............................................................................................................................................................ - 11 -1问题定义与描述1.1问题定义通讯录管理系统1. 2问题描述✧该程序应该能够提供添加、删除和修改通讯录信息的功能;✧基本信息包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;✧能够提供安不同方式查询的功能;如按姓名、年龄或电话等查询;✧能将通讯录保存在文件中;✧能够输出通讯录信息;✧并且界面友好,易于操作。
郑州大学课程报告课程名称:C语言程序设计专业班级:(15)班学生姓名:谢* 学号:任课教师:赵** 学期:课程报告任务书开发一个通讯录管理系统,基本信息包括:编号、姓名、性别、出生年月、固定电话、手机号、电子邮件等基本信息(也可以根据自己情况进行扩充)。
使之能提供以下基本功能:(1)通讯录等信息录入功能(注:数据等要求用文件保存)--输入(2)通讯录信息的浏览功能--输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):①按电话号码进行查询②按姓名查询等③按照年龄排序④按姓名排序等(4)通讯录条目的删除与修改等扩展功能:可以按照自己的程度进行扩展。
比如(1)简单的权限处理(2)报表打印功能(3)模糊查询,如姓张的人员等;或者给定电子邮件的部分进行查询等(4)给定指定年龄范围之内的查询等等。
总之,可以根据自己需求进行分析功能,成绩评定按照难度进行区分。
成绩评定教师:一. 需求分析1,具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。
2,数据包括:人名、工作单位、电话号码和E-MAIL地址。
3,可对记录中的姓名和电话号码进行修改。
4,可增加和删除记录。
5,可显示所有的保存记录。
6,可按人名或电话号码进行查询。
分析建议采用结构体数组和文件系统实现。
结构体成员包括人名、工作单位、电话号码和E-MAIL地址。
根据题目的要求程序应该采用结构体数组和文件系统实现。
应该有文件的操作功能;在程序中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出的功能。
二、概要设计(1).程序的模块组成及各个函数的功能:程序的模块组成:主函数:main();输出数据函数:printf();读取数据函数:scanf();显示记录函数:Display();删除记录函数:shanchu();查找记录函数:chaxun();自定义清屏函数:system(“cls”);自定义输入函数:input();字符输入函数:getchar();修改数据函数:xiugai();保存数据函数:baocun();排序数据函数:paixu();各函数的主要功能:输出数据函数:随时输出数据;读取数据函数:读取输入的数据信息;显示菜单函数:显示可供选择的主菜单;显示记录函数:显示通讯录所有输入的信息;删除记录函数:显示要删除的通讯录所有输入的信息;查找记录函数:显示要查询的通讯录所有输入的信息;自定义清屏函数:清除前面运行留下的信息;自定义输入函数:输入通讯录的成员;;字符输入函数:从终端输入一个字符,遇回车键返回;修改数据函数:修改通讯录的成员信息;保存数据函数:保存通讯录的成员信息;排序数据函数:排序通讯录的成员信息;(2)程序中的抽象数据类型的定义:用户的状态结构用户{编号:姓名:电话;年龄;邮箱:地址;(3)总体流程图根据上面的分析,可以将程序系统的设计分为如下几个模块:插入、显示、删除、查询、修改、保存和退出。
题目:通讯录管理系统一、需求分析任务要求:自学C语言中有关链表及外部文件的内容,设计出通讯录管理系统。
具体要求如下:◆建立通讯录信息,信息至少包括编号、姓名、年龄、电话、通讯地址、电子邮箱等内容;◆能够提供添加、删除和修改通讯录信息等功能;◆能够提供按照不同方式查询的功能,如按姓名或年龄、电话查询;◆能将通讯录保存在文件中;◆能够按表格方式输出通讯录信息。
系统功能需求分析:★1、为存储通讯录信息,需定义一个结构体类型,成员包括编号、姓名、年龄、电话、通讯地址、电子邮箱等,并建立链表,定义该结构体类型的指针,用于指向各结点;★ 2、分别建立具有添加、删除、修改、查询等功能的子函数,完成相应功能,对程序实现模块化。
这其中要用到对链表的删除、插入等知识。
删除时用一结构体指针指向链表的第一个结点,检查该节点的值是否等于输入的要删除的学号,若相等就删除,不相等则后移指针,直至表尾。
插入时也要先找到相应结点,再添加。
查询功能要设置姓名、编号、地址等多种方式。
★3、为实现存储功能,需用到文件的相关函数,打开文件,将添加、修改或删除的信息存入磁盘中。
★4、为以表格的形式输出文件,宏定义格式化输出语句,用横线和竖线构成表格。
二、概要设计系统总体设计框架:对程序进行模块化,建立添加、修改、删除、查找和显示功能的子函数,各子函数中运用链表存储数据。
从主函数开始执行,调用各个子函数,并运用文件相关知识将信息存入磁盘中。
系统功能模块图:三、详细设计主要功能模块的算法设计思路如下:1、添加信息函数(void Add(Link l))(1)定义指向结构体变量的指针;(2)移动指针,找到插入结点;(3)在要插入的结点输入信息;(4)调用保存函数,打开文件,保存输入信息。
2、修改信息函数(void Modify(Link l))(1)定义指向结构体变量的指针;(2)用指针检验链表中是否有记录,若没记录,返回主函数;(3)根据要修改的编号查找对应结点;(4)修改信息;(5)打开文件,保存修改记录。
3、删除信息函数(void Del(Link l))(1)定义指向结构体变量的指针;(2)用指针检验链表中是否有记录,若没记录,返回主函数;(3)根据要修改的编号查找要删除的结点;(4)修改链表,删除对应结点。
4、显示记录函数(void Disp(Link l))(1)打开文件;(2)用指针检验是否有记录;(3)若无记录,输出提示信息,返回主函数;若有记录,移动指针,依次输出记录;(4)关闭文件。
5、查询通讯录信息(void Find(Link l))(1)选择查询方式(按姓名、编号或地址);(2)输入查询关键字:(3)在链表中寻找相应结点;(4)调用输出函数,输出结点信息。
三、主要源程序代码#include "stdio.h " /*标准输入输出函数库*/#include "stdlib.h" /*标准函数库*/#include "string.h" /*字符串函数库*/#define HEADER1 " --------------------------------所有记录--------------------------------- \n"#define HEADER2 " | 编号 | 姓名 | 电话号码 |年龄| 地址 | 邮箱 |\n"#define HEADER3 " |------|---------------|---------------|---|----------|--------------------|\n "#define FORMAT "|%-6s|%-15s|%-12s |%d |%-10s|%-20s|\n"#define DATA p->data.num,p-> ,p->data. phone,p->data.age,p->data.address,p->data.email#define END "-----------------------------------------------------------------------------\n"int save=0; /*是否需要存盘的标志变量*//*定义与联系人有关的数据结构*/struct person /*标记为person*/{char num[6]; /*联系人编号*/char name[15] ; /*联系人姓名*/char phone[12]; /*联系人电话号码*/int age; /*联系人年龄*/char address[10]; /*联系人地址*/char email[20]; /*联系人电子邮箱*/};/*定义每条记录或结点的数据结构,标记为:node*/typedef struct node{struct person data; /*数据域*/struct node *next; /*指针域*/}Node,*Link; /*Node为node类型的结构变量,*Link为node类型的指针变量*/void menu() /*主菜单*/{printf(" ◢◤〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓◥◣");printf("\n ◢◤〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓◥◣");printf("\n █===┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓===█");printf("\n █===┠欢┨┠迎┨┠使┨┠用┨┠电┨┠话┨┠管┨┠理┨┠系┨┠统┨===█");printf("\n █===┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛===█");printf("\n ◥◣〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓◢◤");printf("\n ◥◣〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓◢◤\n");printf(" ★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★");printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");printf(" ┃| | | ┃\n");printf(" ┃ 1、 | 用户信息查询 | 2、 | 所有用户信息┃\n");printf(" ┃| | | ┃\n");printf(" ┃=========|════════════|========|════════════┃\n");printf(" ┃| | | ┃\n");printf(" ┃ 3、 | 删除用户信息 | 4、 | 添加用户┃\n");printf(" ┃| | | ┃\n");printf(" ┃=========|════════════|========|════════════┃\n");printf(" ┃| | | ┃\n");printf(" ┃ 5、 | 修改用户信息 | 6、 | 退出系统┃\n");printf(" ┃| | | ┃\n");printf(" 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");printf("\n 请选择(1-6):");printf("*************************Menu********************************\n");printf(" * 1 添加记录 2 删除记录 *\n");printf(" * 3 修改记录 4 查询记录 *\n");printf(" * 5 显示记录 6 保存记录 *\n");printf(" * 0 退出系统 *\n");printf("*************************************************************\n");}void printhead() /*格式化输出表头*/{printf(HEADER1);printf(HEADER2);printf(HEADER3);}void printdata(Node *pp) /*格式化输出表中数据*/{Node* p;p=pp;printf(FORMAT,DATA);}/*显示单链表l中存储的联系人记录,内容为person结构中定义的内容*/void Disp(Link l){Node *p;p=l->next; /*l存储的是单链表中头结点的指针,该头结点没有存储联系人信息,指针域指向的后继结点才有联系人信息*/if(!p) /*p==NULL,NUll在stdlib中定义为0*/{printf("\n=====>没有记录!\n");return;}printf("\n\n");printhead(); /*输出表格头部*/while(p) /*逐条输出链表中存储的联系人信息*/{printdata(p);p=p->next; /*移动直下一个结点*/printf(HEADER3);}}/*************************************************************作用:用于定位链表中符合要求的节点,并返回指向该节点的指针参数:findmess[]保存要查找的具体内容; nameornum[]保存按什么查找;在单链表l中查找;**************************************************************/Node* Locate(Link l,char findness[],char nameornum[]){Node *r;if(strcmp(nameornum,"num")==0) /*按编号查询*/{r=l->next;while(r){if(strcmp(r->data.num,findness)==0) /*若找到findmess值的学号*/return r;r=r->next;}}else if(strcmp(nameornum,"name")==0) /*按姓名查询*/{r=l->next;while(r){if(strcmp(r->,findness)==0) /*若找到findmess值的联系人姓名*/return r;r=r->next;}}else if(strcmp(nameornum,"address")==0) /*按地址查询*/{r=l->next;while(r){if(strcmp(r->data.address,findness)==0) /*若找到findmess 值的联系人地址*/return r;r=r->next;}}return 0; /*若未找到,返回一个空指针*/}/*输入字符串*/void stringinput(char *t,int lengths,char *attention){char n[255];do{printf(attention); /*显示提示信息*/scanf("%s",n); /*输入字符串*/if(strlen(n) > lengths)printf("\n 超过设定长度! \n"); /*进行长度校验,超过lengths值重新输入*/}while(strlen(n) > lengths);strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/}/*输入age中的数字*/int numberinput(char *attention){int t=0;printf(attention);scanf("%d",&t);return t;}/*增加联系人记录*/void Add(Link l){Node *p,*r,*s; /*实现添加操作的临时的结构体指针变量*/char flag=0,num[6];r=l;s=l->next;Disp(l); /*先打印出已有的联系人信息*/while(r->next!=NULL)r=r->next; /*将指针移至于链表最末尾,准备添加记录*/while(l) /*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/ {while(l) /*输入学编号,保证该编号没有被使用,若输入编号为0,则退出添加记录操作*/{stringinput(num,6,"输入编号(按'0'返回主菜单):"); /*格式化输入编号并检验*/flag=0;if(strcmp(num,"0")==0) /*输入为0,则退出添加操作,返回主界面*/{return;}s=l->next;while(s) /*查询该编号是否已经存在,若存在则要求重新输入一个未被占用的学号*/{if(strcmp(s->data.num,num)==0){flag=1;break;}s=s->next;}if(flag==1) /*提示用户是否重新输入*/{printf("=====>编号 %s 已经存在,是否重试?",num);}else{break;}}p=(Node *)malloc(sizeof(Node)); /*申请内存空间*/if(!p){printf("\n 申请内存空间失败 "); /*如没有申请到,打印提示信息*/ return ; /*返回主界面*/}strcpy(p->data.num,num); /*将字符串num拷贝到p->data.num中*/stringinput(p->,15,"Name:");stringinput(p->data.phone,12,"Phone:");p->data.age=numberinput("Age");stringinput(p->data.address,10,"Address:");stringinput(p->data.email,20,"email:");p->next=NULL; /*表明这是链表的尾部结点*/r->next=p; /*将新建的结点加入链表尾部中*/r=p;save=1;}return ;}/*查询记录*/void Find(Link l) /*按编号或姓名,查询电话记录*/{int select; /*1:按编号查,2:按姓名查,3:按地址查找,其他:返回主界面(菜单)*/char searchinput[20]; /*保存用户输入的查询内容*/Node *p;if(!l->next) /*若链表为空*/{printf("\n=====>无!\n");return;}printf("\n =====>1 按编号查询 =====>2 按姓名查询 =====>3 按地址查询\n");printf(" 请选择[1,2,3]:");scanf("%d",&select);if(select==1) /*按编号查询*/{stringinput(searchinput,6,"请输入已存在的编号:");p=Locate(l,searchinput,"num");/*在l中查找学号为searchinput值的节点,并返回节点的指针*/if(p) /*若p!=NULL*/{printhead();printdata(p);printf(END);printf("按任意键返回");}elseprintf("\n=====>找不到此人!\n");}elseif(select==2) /*按姓名查询*/{stringinput(searchinput,15,"请输入已存在的姓名:");p=Locate(l,searchinput,"name");if(p){printhead();printdata(p);printf(END);printf("按任意键返回");}elseprintf("\n=====>找不到此人!\n");}if(select==3) /*按地址查询*/{stringinput(searchinput,15,"请输入已存在的地址:");p=Locate(l,searchinput,"address");if(p){printhead();printdata(p);printf(END);printf("按任意键返回");}elseprintf("\n=====>找不到此人!\n");}elseprintf("\n**Error:输入错误! 按任意键继续**\n");}/*按姓名删除学生记录:先找到保存该联系人记录的节点,然后删除该节点*/ void Del(Link l){Node *p,*r;char findmess[20];if(!l->next){printf("\n=====>找不到此人的记录!\n");return;}stringinput(findmess,15,"input the existing person name");p=Locate(l,findmess,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>delete success!\n");save=1;}elseprintf("\n=====>Not find this person!\n");}/*修改电话记录。