本文目录一览:
C语言基本框架,详细!
这个没框架一说,你想问的可能是C语言的学习方向和内容上的话题。 C语言主要学习:数据类型、关键字、控制语句、函数、指针、结构体和数组,文件,编译方法,操作系统的API等等。 锐英源教C语言非常好,全面能力综合教材海量源码因人施教,保证掌握工作能力,打开成为项目经理或系统分析员之门。
希望采纳
用C语言编写一个QQ通讯录管理系统设计
课程设计课程设计名称:数据结构课程设计专业班级:计科××××学生姓名:×××学号:××××××指导教师:课程设计时间:计算机应用技术专业课程设计任务书学生姓名×××专业班级计科××学号××××题目××××××××××课题性质A课题来源D指导教师同组姓名无主要内容学习掌握并熟练运用C语言进行程序设计;针对具体应用问题,选择、设计和实现合适的抽象数据类型;进行简单的需求分析,给出设计方案。任务要求综合运用和融化所学理论知识,提高分析和解决实际问题的能力,达到培养良好程序设计能力和习惯的目的,为开发满足问题要求的小型应用软件奠定基础,达到软件工程的综合性基础训练的目的。完成需求分析报告,报告中对关键部分给出图表说明。要求格式规范,工作量饱满。参考文献《数据结构(C语言版)》严蔚敏清华大学出版社《C语言程序设计》(第三版)谭浩强清华大学出版社审查意见指导教师签字:教研室主任签字:年月日1需求分析手机通讯录系统,以联系人为节点建立伪队列(有头尾指针、且可从表中间进行操作),要实现一下基本功能。增加联系人删除联系人修改联系人清空通讯录查找联系人按分组显示联系人显示全部联系人退出系统2概要设计(1)程序总体框架如图1所示:图1程序框架图(2)序中各函数程简单说明见如表1函数说明所示:返回值函数名参数表函数说明提供客户intmainvoid主函数是voidinitAddressBookLinkQueueQ初始化通讯录否boolenAddressBookLinkQueueQ增加联系人是boolupdateLinkQueueQ修改联系人是booldelPersonLinkQueueQ删除联系人是boolfindByNameLinkQueueQ查找联系人是boolfindByGroupLinkQueueQ按组显示是voiddisAllLinkQueueQ显示全部联系人是boolclearAddressBookLinkQueueQ清空通讯录是表1函数说明(2)对程序中的各个函数功能的描述① 主函数main:系统开始、结束界面的显示、各个功能函数的调用、转换以及参数的传递、定义通讯头结点并传递给各个功能函数② 初始化通讯录函数initAddressBook:初始化主函数传入的头结点,即初始化通讯录,此系统采用伪队列,有头、尾指针,可从中间进行删除操作③ 增加联系人函数enAddressBook增加联系人到通讯录的尾部,返回增加是否成功。④ 修改联系人函数按照用户提供的联系人姓名修改联系人所有信息,返回修改是否成功。⑤ 删除联系人按照用户指定的联系人姓名删除相应联系人信息,返回删除是否成功。⑥ 查找联系人按照用户提供的联系人姓名查找第一个合法姓名对应的信息,查找成功则显示信息,失败则提示无此联系人,返回是否查找到。⑦ 按组显示函数按照用户提供的分组名称,查找组中联系人,若存在则全部输出,若不存在则提示无此分组,返回是否超找到合法联系人。⑧ 显示全部联系人函数显示当前通讯录中所有联系人的信息,若为空通讯录,则显示无联系人。⑨ 清空通讯录删除所有联系人信息,返回是否成功!⑩ 通讯录人数函数判断通讯录当前联系人数量,返回之,此函数主要是为清空通讯录函数所调用,故不提供给用户。计3运行环境1)软件环境操作系统:Windows72)硬件环境处理器:IntelPentium166MX或更高内存:32MB以上硬盘空间:1GB以上显卡:SVGA显示适配4开发工具和编程语言MicrosoftvisualC++C语言5详细设//主函数intmain(){LinkQueueQ;initAddressBook(Q);intflag=0;while(flag!=8){printf("※※※※※主※※※※※菜※※※※※单※※※※※\n");printf("※1、增加联系人2、删除联系人※\n");printf("※3、修改联系人4、清空通讯录※\n");printf("※5、查找联系人6、按组显示※\n");printf("※7、显示全部联系人8、退出※\n");printf("※※※※※※※※※※※※※※※※※※※※※※※\n");printf("请输入编号(1-8):\n");scanf("%d",flag);if(flag8){printf("输入错误请重新输入!\n");continue;}else{switch(flag){case1:if(enAddressBook(Q))printf("增加联系人成功!\n");elseprintf("增加联系人失败!\n");break;case2:if(delPerson(Q))printf("删除联系人成功!\n");elseprintf("联系人删除失败!\n");break;case3:if(update(Q))printf("修改联系人成功!\n");elseprintf("修改联系人失败!\n");break;case4:if(clearAddressBook(Q))printf("通讯录已清空!\n");elseprintf("通讯录清空失败!\n");break;case5:findByName(Q);break;case6:findByGroup(Q);break;case7:disAll(Q);break;case8:system("cls");break;}}}printf("※※※※※感谢您使用本系统!※※※※※※\n");return0;}//初始化通讯录voidinitAddressBook(LinkQueueQ){Q.front=Q.rear=(QNode*)malloc(sizeof(QNode));if(!Q.front)exit(1);elseQ.front-next=NULL;}//清空通讯录boolclearAddressBook(LinkQueueQ){system("cls");while(addressBookLength(Q)!=0){QNode*p;p=Q.front-next;Q.front-next=p-next;if(p==Q.rear)Q.rear=Q.front;free(p);}returntrue;}//通讯录当前人数intaddressBookLength(LinkQueueQ){inti=0;QNode*p;p=Q.front;if(Q.front==Q.rear)i=0;else{while(p!=Q.rear){p=p-next;i++;}}returni;}//删除联系人booldelPerson(LinkQueueQ){char_name[20];system("cls");printf("请输入要删除的联系人的姓名:\n");scanf("%s",_name);QNode*p,*q;if(Q.front==Q.rear){printf("通讯录为空!\n");returnfalse;}else{p=Q.front;q=Q.front-next;while(q!=Q.rear){if(strcmp(q-name,_name)==0){p-next=q-next;free(q);//删除节点returntrue;}else{p=p-next;q=q-next;}}if((strcmp(q-name,_name)==0)){free(q);Q.front=Q.rear;returntrue;}else{printf("无此联系人!\n");returnfalse;}}}//查找联系人boolfindByName(LinkQueueQ){system("cls");if(Q.front==Q.rear){printf("手机中无联系人!\n");returnfalse;}else{char_name[20];printf("请输入要查询的联系人姓名:\n");scanf("%s",_name);QNode*p;p=Q.front-next;while(p-next!=NULL){if(strcmp(p-name,_name)==0){printf("姓名:%s号码:%s分组:%s\n",p-name,p-tel,p-group);returntrue;}p=p-next;}if(strcmp(p-name,_name)==0){printf("姓名:%s号码:%s分组:%s\n",p-name,p-tel,p-group);returntrue;}else{printf("查无此人!\n");returnfalse;}}}//按组显示联系人boolfindByGroup(LinkQueueQ){system("cls");if(Q.front==Q.rear){printf("手机中无联系人!\n");returnfalse;}else{char_group[20];printf("请输入要查询的分组:\n");scanf("%s",_group);QNode*p;p=Q.front-next;while(p-next!=NULL){if(strcmp(p-group,_group)==0){printf("姓名:%s号码:%s\n",p-name,p-tel);}p=p-next;}if(strcmp(p-group,_group)==0){printf("姓名:%s号码:%s\n",p-name,p-tel);returntrue;}else{printf("无此分组!\n");returnfalse;}}}//增加联系人boolenAddressBook(LinkQueueQ){system("cls");QNode*p;p=(QNode*)malloc(sizeof(QNode));if(!p)returnfalse;else{printf("请输入联系人姓名:\n");scanf("%s",p-name);printf("请输入联系人号码:\n");scanf("%s",p-tel);printf("请输入联系人分组:\n");scanf("%s",p-group);if(Q.front-next==NULL){Q.front-next=p;Q.rear=p;Q.rear-next=NULL;}else{p-next=NULL;Q.rear-next=p;Q.rear=p;}returntrue;}}//修改联系人boolupdate(LinkQueueQ){system("cls");if(Q.front==Q.rear){printf("手机中无联系人!\n");returnfalse;}else{char_name[20];printf("请输入要修改的联系人姓名:\n");scanf("%s",_name);QNode*p;p=Q.front-next;while(p-next!=NULL){if(strcmp(p-name,_name)==0){printf("请输入新联系人姓名:\n");scanf("%s",p-name);printf("请输入新联系人号码:\n");scanf("%s",p-tel);printf("请输入新联系人分组:\n");scanf("%s",p-group);returntrue;}p=p-next;}if(strcmp(p-name,_name)==0){printf("请输入新联系人姓名:\n");scanf("%s",p-name);printf("请输入新联系人号码:\n");scanf("%s",p-tel);printf("请输入新联系人分组:\n");scanf("%s",p-group);returntrue;}else{printf("查无此人!\n");returnfalse;}}}//显示所有联系人voiddisAll(LinkQueueQ){system("cls");inti=0;QNode*p;p=Q.front-next;if(Q.front==Q.rear)printf("无联系人!\n");else{printf("姓名号码分组\n");while(p!=NULL){printf("%15s%15s%15s\n",p-name,p-tel,p-group);p=p-next;}}}6调试分析1.测试中的问题举例:在测试删除联系人函数时发现无论通讯录中现存多少条记录只要删除一条之后,通讯录就会被清空,经过检查发现是删除函数中的条件控制设置有错,导致只要一删除一个联系人就会事头结点与尾结点指向同一个,导致再显示联系人时显示无联系人。经过调整已处理好。2.算法改进设想举例:程序中还有很多地方不能很好的模拟通讯录的功能,比如在增肌联系人时,不管原来新联系人姓名是否已存在,都会被加入通讯录,这样一来就有可能重复记录。此外在查找联系人时只要查找到一个合法记录就会中断查找操作,如此有可能导致记录的漏查。结合以上两点应优化增加查找联系人算法,在存入之间进行防重判断。7测试结果1.测试数据举例:姓名手机号分组张三12345678910家人李四12345678911朋友王五12345678912朋友赵六12345678913同学表2测试数据举例2.按如下顺序进行测试:1)将测试数据逐条输入通讯录(测试增加联系人函数)2)显示全部联系人(测试显示联系人函数)3)选择一个联系人进行修改(测试修改联系人函数)4)显示全部联系人(验证修改联系人函数是否有效)5)选择一个联系人进行查找(测试查找联系人函数)6)选择一个多人分组进行按分组显示(测试按分组显示函数)7)选择清空联系人(测试清空联系人函数)8)显示全部联系人(验证清空联系人函数)9)选择退出(退出程序)3、按照如上提供的测试步骤得出以下结果运行图:主菜单如图2所示:图2运行示例图a1)在菜单中选择“1”将测试数据逐条输入通讯录,如图3图3运行示例图b2)在菜单中选择“7”显示全部联系人,如图4图4运行示例图c3)在菜单中选择“3”选择一个联系人进行修改,如图5图5运行示例图d4)在菜单中选择“7”显示全部联系人,如图6图6运行示例图e5)在菜单中选择“5”选择一个联系人进行查找,如图7图7运行示例图f6)在菜单中选择“6”选择一个多人分组进行按分组显示,如图8图8运行示例图g7)在菜单中选择“4”清空联系人,如图9图9运行示例图h8)在菜单中选择“7”显示全部联系人,如图10图10运行示例图i9)在菜单中选择“8”,退出,如图11图11运行示例图j参考文献[1]严蔚敏,《数据结构(C语言版)》清华大学出版社[2]谭浩强.《C语言程序设计》(第三版)清华大学出版社[3]PeterVanDerLinden,C专家编程,人民邮电出版社[4]KennethA.ReekC和指针,人民邮电出版社心得体会通过这次数据结构实践作业,我更深刻的体会到了C语言的语句简洁性、紧凑性,与数据结构思想对于一个程序编码顺利进行的重要性。语言是程序的骨肉,而数据结构和算法即使程序的灵魂,要想成功的编写程序必须选好合适的数据结构,比如这次课程设计中,最开始我准备用普通的线性表进行设计,后来发现那样很不方便,后来改为用“伪队列”之后就方便了许多。另外,我觉得比较重要的一点是在编复杂程序时要有宏观思想,想从整体把握设计好各个板块的调用关系,最好先做出一个流程图,再按照这个总体设想进一步具体、细化!这样才不会在需要调用其它函数时手忙脚乱!此外,进行如上所述的操作前提都是以扎实的语言基础做为前提的,在最开始的代码编辑阶段,我曾被指针很深的困扰,后来对此一节找了些资料进行“补课”,自己也进行的深入的理解,后来才逐渐顺利起来!信息科学与工程学院课程设计成绩评价表课程名称:数据结构课程设计设计题目:×××××专业:计科班级:×××姓名:×××学号:××××××序号评审项目分数满分标准说明1内容思路清晰;语言表达准确,概念清楚,论点正确;实验方法科学,分析归纳合理;结论严谨,设计有应用价值。任务饱满,做了大量的工作。2创新内容新颖,题目能反映新技术,对前人工作有改进或突破,或有独特见解3完整性、实用性整体构思合理,理论依据充分,设计完整,实用性强4数据准确、可靠数据准确,公式推导正确5规范性设计格式、绘图、图纸、实验数据、标准的运用等符合有关标准和规定6纪律性能很好的遵守各项纪律,设计过程认真;7答辩准备工作充分,回答问题有理论依据,基本概念清楚。主要问题回答简明准确。在规定的时间内作完报告。总分综合意见指导教师年月日
C语言的基本框架是什么意思?
C语言的基本框架指的是构成C语言程序的主要的结构,也是最基本的结构。
简单的基本框架是仅由一个主函数(函数名main)构成,在主函数中也只有一条语句,该语句是通过标准输出函数printf( )在显示屏上输出指定信息。如下面的程序:
#include"stdio.h"
int main()
{
printf ("\nThis is my first C program!\n");
}
程序开头的#include"stdio.h"是预处理命令,其作用是包含输入输出库文件,当程序中调用标准输入或输出函数时添加此行。
c语言编程如何实现图形化?
这要看你所使用的系统平台,图形化编程与系统平台息息相关
对于C语言来说,有许多成熟的框架。比如Windows上可使用Windows的系统API,Linux下有GTK,嵌入式环境下有miniGUI等。
C语言是一门比较特殊的语言,虽然也是高级编程语言的一种,但是为了和其他语言区分开来,部分人也会将C语言称作中级语言,主要是因为C语言不是面向对象的语言,并且有指针这样的利器可以直接对底层以及硬件进行操作。
正是因为C语言不是面向对象的语言,在图形化这样更偏上层的应用中,一般会使用C++替代C语言,这样能极大的降低开发的工作量。
比如,Windows下可使用MFC,WPF也支持C++。Linux下一般用跨平台的QT(可在Windows/MAC等多种平台运行)。嵌入式环境下有嵌入式的QT版本。
C语言中switch语句的N-S流程图怎么画啊?
1、首先要进入到该绘制网站中,在新建文件夹中选择流程图进行新建使用,打开流程编辑工具。
2、直接进入在线编辑页面中,在绘制面板中是有流程图的基础图形和工具栏,以及编辑面板等。这些在绘制时都是需要使用的,可以先将绘制面板进行熟悉。
3、首先是对流程图框架进行搭建使用,直接使用鼠标点击图形样式就会自动添加到编辑面板中,之后在用鼠标移动到需要的位置就可以。图形的添加与需要填充的内容成正比。
4、设置内容大小,样式以及排列方式,还有给流程图图形添加背景颜色。
5、绘制好的流程图我们还要对其进行检查使用这样可以保证流程图的正确率,一般选择编辑栏目中的选择节点可以进行编辑使用。
6、画好后的流程图可以导出使用,有多种格式可以进行选择方便存储。在面板中的右上方显示栏里面可以选择相关操作。