《C语言论文正文.pdf》由会员分享,可在线阅读,更多相关《C语言论文正文.pdf(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品 精品 第一章 绪论 1.1 当前应用领域的现状 我们现在如何管理与我们联系的人的信息呢?有多种方式,比如说,有储存电话号码到手机上的,有记录电话等信息到本子上的,还有用名片夹存放名片的,也有记录在 word 文档中或打印出来的,等等很多种形式。对于存储电话号码到手机上的方式,比较方便,随时随地可以联系,不过只能通过电话联系,没有记录其他的联系方式,如果手机丢了可能就谁也联系不上了;对于记录电话等信息到本子上的方式,第一也可能丢失本子,第二是查找起来比较困难,需要人工查找,而且更新时不容易,需要涂改以前记录的信息,第三格式比较死板,不利于跟随用户的需求扩展;对于用名片夹存放名片的形式也是查
2、找起来不方便,有丢失的危险;对于记录到word 文档或打印出来的,也是扩展性不强,查找起来不方便。如此多的方式我们都感觉有一定的缺陷,那我们如何管理我们的联系人通讯资料呢?提出一个大胆的假设,如果我们在网络精品 精品 上建立一个系统提供通讯录管理功能,这样我们就可以随时随地通过网络对通讯录进行管理,而现在我们的手机都逐渐更新换代成可以连接计算机网络了,这样我们可以随时随地查找任意信息,查找快速,维护方便,丢失手机也不会丢失联系方式,而且可以根据用户的需要定制,比较灵活,这个可能是最完美的方案了。1.2 C 语言的发展 C 语言的前身是 ALGOL 语言(AL-GOL60 是一种面向问题的高级语
3、言)。1963 年英国剑桥大学推出 CPL 语言,此语言在ALGOL 语言的基础上增加了硬件处理能力,同年剑桥大学的马丁理查德对其进行简化,提出 BCPL 语言;1970 年美国贝尔实验室的肯汤姆逊进一步简化,提出了 B 语言(取 BCPL 的第一个字母);1972 年美国贝尔实验室的布朗W.卡尼汉和丹尼斯M.利奇对其完善和扩充,提出了 C 语言(取 BCPL 的第二个字母);1987年美国标准化协会指定了 C 语言标准 ANSI C,即现在流行的 C语言。自 1972 年投入使用之后,C 语言成为 UNIX 和 XENIX 操作系统的主要语言,是当今使用最为广泛的程序设计语言之一。精品 精品
4、 1.3 C 语言的特点 (1)C 语言是具有低级语言功能的高级语言。C 语言既具有高级语言的功能,又具有低级语言的许多功能。它把高级语言的基本机构和语言与低级语言的实用性集合起来,是处于汇编语言和高级语言之间的一种程序设计语言,也可称其为“中级语言”。(2)C 语言简洁、紧凑、使用方便、灵活。程序书写形式自由,主要用小写字母表示,相对其他高级语言源程序代码量少。(3)运算符丰富,表达式能力强。C 语言共有 34 种运算符,范围广泛,除一般高级语言使用的算术、关系和逻辑运算符外,还可以实现以二进制位为单位的运算,并且具有如 a+、b+等单项运算符和+=、-=、*=、/=等复合运算符。(4)数据
5、结构丰富,便于数据的描述与存储。C 语言具有丰富的数据结构,其数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,因此能实现复杂的数据结构的运算。(5)C 语言是结构化、模块化的编程语言。程序的逻辑结构可以使用顺寻、分支和循环 3 种基本结构。C 语言程序采用函数结构,精品 精品 便于把整体程序分割成若干相对独立的功能模块,为程序模块间的相互调用以及数据传递提供了便利。(6)C 语言程序中,可使用宏定义编译预处理语句、条件编译预处理语句。(7)可移植性好。与汇编语言相比,C 程序基本上不作修改就可以运行于各种型号的计算机和各种操作系统。C 语言也存在一些不足之处,例如运
6、算符及其优先级过多、语法定义不严格等,对于初学者有一定的困难。由于 C 语言具有上述特点,因此 C 语言得到了迅速推广,成为人们编写大型软件的首选语言之一。用 C 语言编写简单的接口程序.在当今,流行的编程软件种类繁多,它们编程方便、易于维护,但是在与硬件直接打交道和编制系统软件时却束手无策,于是 C 语言就有了用武之地。C 语言作为汇编语言与高级语言之间的一种过渡语言,兼有汇编语言的高效和高级语言的方便。在通讯中,为了保证行运安全可靠,标准的串行口必须具有许多握手信号和状态信息。这是因为通讯的各个计算机 CPU 速度不一样(这会导致“错帧”)以及发送机发送数据速度比接收机接精品 精品 收速度
7、快(这会导致“过冲”)。为解决这个问题,我们采用一个简单的握手信号,即发送机每次仅发送半个字节(低 4 位)的数据,而另外半个字节(高 4 位)则用来传送信息。我们可以对信息位(高 4 位)进行如下简单的编码:0H:发送的是新的半个字节数据 1H:重新发送上次传送错误的数据 2H:文件名结束 3H:文件结束 这样,每当发送机发送一个字节以后,就等待接受机发回送信号,这回送信号就 是发送机发送过来的那个字节。发送机接收到回送信号后,把它与刚发送的字节 相比较,如果相同,就发送新的半个字节,否则就重新发送。新数据与旧数据通 过信息位来区分。精品 精品 第二章 问题定义 2.1 设计题目的内容、任务
8、及具体要求 本程序是非数值计算型算法设计,我设计出了通讯录管理系统的基本功能,并设计了简单的界面。本程序主要考察对自定义函数的熟悉程度,本程序主要使用的是数组的相关操作,包括结构体数组的输入、输出、查找、删除等。我设计的这个通讯录系统也初步实现了人员信息的显示、删除、查找、修改、添加等必要的功能。记录通讯录内的人员的学号、姓名、电话号码、家庭住址。显示所有人员的信息。通过输入姓名查找人员信息。通过输入姓名查找到要删除的人员信息,然后可以进行删除。通过输入姓名查找到要修改的人员信息,然后可以进行修改。添加人员信息。精品 精品 第三章 基本思路与详细设计 3.1 基本思路 本系统首先设计出了主函数
9、,然后根据去要实现的功能分别设计,显示、删除、查找、修改、添加功能的子函数。在显示的函数设计过程中首先运用拉文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。删除函数的设计是首先从文件内找到要删除的人,然后通过写一个实现删除目的的 FOR 循环将该人从内存里删除,然后再用写的方式打开文件,将内存内的信息写入文件,实现删除。查找也是先打开文件,用一个字符串对比的方法找出用户要查找的人,然后打印出来。修改也大体和删除相同,添加函数在设计时通过申请一片空间,然后通过指针将需要添加的信息添加进去,从而实现添加功能。下面就是总的程序流程图:精品 精品 图 3-1 通讯录管理总的程序流程图 开
10、始 执行 printf()函数 选择(a)调用output()函数 调用 del()函数 调用 found()函数 调用 modify()函数 调用 insert()函数 执行printf()退出系精品 精品 3.2 各功能实现程序流程图 3.2.1 主函数模块的流程图 执行 printf()函数 开始 进入主函数 int main()输入指令(a)精品 精品 图 3-2-1 主函数流程图 3.2.2 void output()函数流程图 调用output()函数 调用 del()函数 调用 found()函数 执行printf()退出系统 调用 insert()函数 调用 modify()函
11、数 a!=1.2.3.4.5.6 开始 If 语句判断 执行 printf()执行 while()循环 精品 精品 图 3-2-2 void output()函数流程图 3.3.3 void del()函数流程图 执行 for()循环 开始 执行 if()执行 printf()结束 执行 dowhile()循环语句 执行 scanf()精品 精品 图 3-2-3 void del()函数流程图 3.2.4 void found()函数流程图 精品 精品 图 3-2-4 void found()函数流程图 3.2.5 void modify 函数流程图 执行 while()结束 执行 print
12、f()执行 scanf()开始 执行 if()执行 printf()结束 精品 精品 开始 执行 if()执行 printf()结束 执行 while()执行 printf()执行 scanf()执行 for()执行 if()执行 if()执行 printf()结束 执行 for()循环 结束 精品 精品 图 3-2-5 void modify 函数流程图 精品 精品 3.2.6 void insert()函数流程图 开始 执行 if()执行 printf()结束 申请空间 执行 printf()执行 scanf()写入文件 结束 精品 精品 图 3-2-6 void insert()函数流程
13、图 第四章 代码实现 精品 精品 4.1 结构体变量和一些函数的定义 以下为所调用的头文件:#include /*I/O 函数*/#include /*字符串函数*/#include 软件中使用了结构体和结构体数组,如:typedef struct /*声明结构体类型*/char num6;char name10;char phone13;char addr30;datatype;/*声明数据类型*/对用户的信息进行保存,它们都以二进制的形式读写。其中:char num6;char name10;精品 精品 char phone13;char addr30;分别对学号、姓名、电话与住址进行存储
14、。其中还使用了大量的子函数,例如:int menu_select();/*菜单函数*/linklist createlist(void)/*建立函数*/void insertnode(linklist head,listnode*p);/*添加函数*/void delnode(linklist head);/*删除函数*/void printlist(linklist head);/*输出函数*/void save()/*存储函数*/4.2 完成各功能的子函数编码分析 4.2.1 菜单函数 int menu_select()int sn;printf(n);printf(n);printf(n
15、);精品 精品 printf(ntt 通讯录管理系统 );printf(n);printf(ntt*主菜单*);printf(ntt*1.建 立 通 讯 录 2.添 加 菜 单*);printf(ntt*3.查询菜单 4.删除菜单*);printf(ntt*5.输出名单 6.数据存盘*);printf(ntt*0.退出本通讯录*);printf(ntt*);printf(n);printf(ntt 请选择操作 0-6:);for(;)scanf(%d,&sn);if(sn6)printf(ntt 输入错误!n);else break;return sn;精品 精品 图 4-2-1 菜单函数界面
16、图 4.2.2 建立函数 linklist createlist(void)linklist head=(listnode*)malloc(sizeof(listnode);listnode*p,*rear;int flag=1;rear=head;while(flag=1)p=(listnode*)malloc(sizeof(listnode);精品 精品 printf(请输入学号:);scanf(%s,p-data.num);printf(请输入姓名:);scanf(%s,p-data.name);printf(请输入电话号码:);scanf(%s,p-data.phone):printf
17、(请输入);scanf(%s,p-data.addr);rear-next=p;rear=p;printf(ntt 继续建表吗?(1.是/0.不):);scanf(%d,&flag);if(flag=1)printf(ntt 创建成功!n);rear-next=NULL;return head;图 4-2-2 建立函数界面图 4.2.3 添加函数 void insertnode(linklist head,listnode*p)listnode*p1,*p2;p1=head;p2=p1-next;精品 精品 while(p2!=NULL&strcmp(p2-data.num,p-data.nu
18、m)next;p1-next=p;p-next=p2;printf(ntt 插入成功!n);图 4-2-3 添加函数界面图 4.2.4 查找函数 listnode*listfind(linklist head)精品 精品 listnode*p;char phone15;char name10;int xz;printf(ntt-n);printf(ntt 1.号码查询n);printf(ntt 2.姓名查询n);printf(ntt-n);printf(ntt 请选择:);p=head-next;scanf(%d,&xz);if(xz=1)printf(ntt 请输入要查找的号码:);scan
19、f(%s,phone);while(p&strcmp(p-data.phone,phone)next;if(p=NULL|strcmp(p-data.phone,phone)0)p=NULL;else if(xz=2)精品 精品 printf(ntt 请输入要查询者的姓名:);scanf(%s,name);while(p&strcmp(p-data.name,name)!=0)p=p-next;return p;图 4-2-4 查找函数界面图 4.2.5 删除函数 void delnode(linklist head)int jx;listnode*p,*q;p=listfind(head);
20、if(p=NULL)printf(ntt没有要删除的通讯者!:n);精品 精品 return;printf(ntt 真的要删除该结点吗?(1.是/0.不):);scanf(%d,&jx);if(jx=1)q=head;while(q!=NULL&q-next!=p)q=q-next;q-next=p-next;free(p);printf(ntt 通讯者已被删除!n);图 4-2-5 删除函数界面图 精品 精品 4.2.6 输出函数 void printlist(linklist head)listnode*p;p=head-next;printf(ntt 编号 姓名 电话 地址 n);pri
21、ntf(ntt-n);while(p!=NULL)printf(ntt%s%s%s%sn,p-data.num,p-data.name,p-data.phone,p-data.addr);printf(ntt-n);p=p-next;精品 精品 图 4-2-6 输出函数界面图 4.2.7 存储函数 void save()typedef struct node ;FILE*fp;if(fp=fopen(message,wb)=NULL)printf(No Information n);exit(1);精品 精品 printf(n Contain Files n);fwrite(p,sizeof(
22、struct node),1,fp);fclose(fp);图 4-2-7 存储函数界面图 第五章 调试与测试 5.1 执行软件 一、当软件中总有输入人员信息时:精品 精品 1.查看全部信息时:根据提示输入 1 2.删除人员信息:根据提示输入 2 按回按回车 显示人员信息车 输入需要删除人员姓名:例如(欧鸿)按回车 显示需要删除人员信息并删除。3.查找人员信息:根据提示输入 3 按回车 输入要查找的人员名字:例如(欧鸿)按回车 显示查找到的人员信息。4.修改人员信息:根据提示输入 4 按回车 输入需要修改的人员姓名:例如(欧鸿)按回车 显示修改前的信息。根据提示输入修改的信息。5.添加人员信息
23、:根据提示输入 5 按回车 精品 精品 输入添加的信息 学号:姓名:电话:家庭住址:输入完毕后 按回车 可以再根据提示使用查找功能。该操作可以看见刚才添加的人员信息。二、当软件中总没有输入人员信息时:1.查看全部信息时:根据提示输入 1 按回车 显示:无法从已有通讯录输入!n 可能是因为原通讯录不存在或为空!n 建议你检查你的通讯录文挡!2.删除人员信息:根据提示输入 2 按回车 输入需要删除人员姓名:例如(欧鸿)按回车没有信息。3.查找人员信息:根据提示输入 3 按回车 精品 精品 输入要查找的人员名字:例如(欧鸿)按回车 显示:对不起,通讯簿中没有此人的记录。4.修改人员信息:根据提示输入
24、 4 按回车 输入需要修改的人员姓名:例如(欧鸿)按回车 没有显示 5.添加人员信息:根据提示输入 5 按回车 输入添加的信息 学号:姓名:电话:家庭住址:输入完毕后 按回车 可以再根据提示使用查找功能。该操作可以看见刚才添加的人员信息。第六章 总结与心得 精品 精品 通过这次课程设计,我对很多的函数有了新的认识,也学会了运用多种函数,我也明白了写软件的基本过程和基本方法。写软件的过程中我又学到了曾经自己不知道的函数或是自己不会的函数的用法。特别是文件的开启和关闭,读与写。这次课程设计课总的来说让我受益匪浅。在软件的设计过程中遇到了很多的困难。在软件一次一次的调试失败下曾经想过要放弃。我最后还
25、是让自己坚持了下来,毫不畏惧困难,在同学的帮助与讲解下我总算是顺利的完成了软件的设计。虽然在调试程序遇到了很多的困难,当软件调试成功时那种喜悦的感觉没有什么东西可以代替。在程序的编写过程中我发现我自己有很多的知识漏洞和缺陷,需要进一步努力学习来完善自己。在这几天的编写过程中我对C语言有啦更进一步的认识和了解。此次编程过程的经验和知识肯定能促进我以后的学习。此次课程设计不仅给了我很多很好的经验,也然我体会到了失败时的焦急和难受,也体会到了成功时的兴奋与喜悦。精品 精品 附录:源代码#include /*I/O 函数*/#include /*字符串函数*/#include typedef stru
26、ct /*声明结构体类型*/char num6;char name10;char phone13;char addr30;datatype;/*声明数据类型*/typedef struct node /*通讯录结构中结点的定义*/datatype data;/*嵌套*/struct node*next;/*定义结构体指针指向另一个结构体对象的指针*/listnode;typedef listnode*linklist;/*定义了指向 listnode 结构体的指针类型*/linklist head;/*定义一个 linklist 类型的 head 变量*/listnode*p;/*定义 p 为
27、指向 listnode 结构体的指针*/int menu_select();/*菜单函数*/linklist createlist(void);/*创建链表*/void insertnode(linklist head,listnode*p);/*添加函数*/listnode*listfind(linklist head);void delnode(linklist head);/*删除函数*/void printlist(linklist head);/*输出函数*/void save();/*以下是主函数*/void main()for(;)精品 精品 switch(menu_select
28、()case 1:printf(ntt*通讯录的建立*n);printf(nn);head=createlist();break;case 2:printf(ntt*通讯录信息添加*n);p=(listnode*)malloc(sizeof(listnode);printf(nn);printf(请输入学号:);scanf(%s,p-data.num);printf(请输入姓名:);scanf(%s,p-data.name);printf(请输入电话号码:);scanf(%s,p-data.phone);printf(请输入地址:);scanf(%s,p-data.addr);insertno
29、de(head,p);break;case 3:printf(ntt*n);printf(ntt*通讯录信息查询*n);printf(ntt*n);p=listfind(head);if(p!=NULL)printf(ntt*编号 姓名 电话 地址*n);printf(ntt-n);printf(ntt*%s%s%s%s *n,p-data.num,p-data.name,p-data.phone,p-data.addr);printf(ntt-n);精品 精品 else printf(ntt 没有你要找的人!n);break;case 4:printf(ntt*n);printf(ntt*通
30、讯信息的删除*n);printf(ntt*n);delnode(head);break;case 5:printf(ntt*n);printf(ntt*通讯录输出*n);printf(ntt*n);printlist(head);break;case 6:printf(ntt*n);printf(ntt*数据存盘*n);printf(ntt*n);save();break;case 0:printf(ntt 谢谢您的使用!n);return;/*菜单函数*/int menu_select()int sn;printf(n);printf(n);printf(n);printf(ntt 通讯录管
31、理系统 );printf(n);printf(ntt*主菜单*);精品 精品 printf(ntt*1.建立通讯录 2.添加菜单*);printf(ntt*3.查询菜单 4.删除菜单*);printf(ntt*5.输出名单 6.数据存盘*);printf(ntt*0.退出本通讯录*);printf(ntt*);printf(n);printf(ntt 请选择操作 0-6:);for(;)scanf(%d,&sn);if(sn6)printf(ntt 输入错误!n);else break;return sn;/*建立函数*/linklist createlist(void)linklist he
32、ad=(listnode*)malloc(sizeof(listnode);listnode*p,*rear;int flag=1;rear=head;while(flag=1)p=(listnode*)malloc(sizeof(listnode);printf(请输入学号:);scanf(%s,p-data.num);printf(请输入姓名:);scanf(%s,p-data.name);printf(请输入电话号码:);scanf(%s,p-data.phone);printf(请输入地址:);scanf(%s,p-data.addr);rear-next=p;rear=p;精品 精品
33、 printf(ntt 继续建表吗?(1.是/0.不):);scanf(%d,&flag);if(flag=1)printf(ntt 创建成功!n);rear-next=NULL;return head;/*添加函数*/void insertnode(linklist head,listnode*p)listnode*p1,*p2;p1=head;p2=p1-next;while(p2!=NULL&strcmp(p2-data.num,p-data.num)next;p1-next=p;p-next=p2;printf(ntt 插入成功!n);/*查找函数*/listnode*listfind
34、(linklist head)listnode*p;char phone15;char name10;int xz;printf(ntt-n);printf(ntt 1.号码查询n);printf(ntt 2.姓名查询n);printf(ntt-n);printf(ntt 请选择:);p=head-next;scanf(%d,&xz);精品 精品 if(xz=1)printf(ntt 请输入要查找的号码:);scanf(%s,phone);while(p&strcmp(p-data.phone,phone)next;if(p=NULL|strcmp(p-data.phone,phone)0)p
35、=NULL;else if(xz=2)printf(ntt 请输入要查询者的姓名:);scanf(%s,name);while(p&strcmp(p-data.name,name)!=0)p=p-next;return p;/*删除函数*/void delnode(linklist head)int jx;listnode*p,*q;p=listfind(head);if(p=NULL)printf(ntt 没有要删除的通讯者!:n);return;printf(ntt 真的要删除该结点吗?(1.是/0.不):);scanf(%d,&jx);if(jx=1)q=head;while(q!=NU
36、LL&q-next!=p)q=q-next;q-next=p-next;free(p);精品 精品 printf(ntt 通讯者已被删除!n);/*输出函数*/void printlist(linklist head)listnode*p;p=head-next;printf(ntt 编号 姓名 电话 地址 n);printf(ntt-n);while(p!=NULL)printf(ntt%s%s%s%sn,p-data.num,p-data.name,p-data.phone,p-data.addr);printf(ntt-n);p=p-next;void save()/*存储函数*/typ
37、edef struct node;FILE*fp;if(fp=fopen(message,wb)=NULL)printf(No Information n);exit(1);printf(n Contain Files n);fwrite(p,sizeof(struct node),1,fp);fclose(fp);精品 精品 参考文献 【l】周微微,王建新,陈零,盛羽基于Intcrnet的C语言教学支撑平台的 设计与实现计算机应用,2008,28(0:260263 43 陈明数据结构(C+版)M北京:清华大学出版社,2005:9297,261269【3】谭浩强cC+程序设计M】北京:清华大学出版社,2005205278【6】黎步银,姜胜林,吕文中,等基于 c 语言的串口通信程序设计【J】传感技术学报,2002,12(3):7881