5.4《C语言程序设计》课程设计实验报告封面
南京航空航天大学金城学院
《C语言程序设计》课程设计
实验报告
题目:
班级:
学号:
姓名:
成绩:
指导教师:
完成日期: 年 月 日
目录
1.第一章:前言……………………………………………………2
2.第二章:概述……………………………………………………3
3.第三章:主要流程图……………………………………………4
4.第四章:算法分析………………………………………………5
5.第五章:测试及输出结果………………………………………9
6.第六章:课程设计体会…………………………………………
7.第七章:参考文献……………………………………………
8.第八章:程序源代码………………………………………………
第一章:前言
通过一个学期的学习,我认为要学好C语言程序这门课程,不仅要认真学习课本知识,更重要的是要通过上机实践实现对知识的强化与巩固。C语言博大精深,需要我们认真体会,小心求证,不断实践。
C语言课程设计则对我们有以下几点帮助:
1. 进一步掌握和利用C语言进行程序设计的能力;
2. 进一步理解和运用结构化程序设计的思想和方法;
3. 初步掌握开发一个小型实用系统的基本方法;
4. 学会调试一个较长程序的基本方法;
5. 学会利用流程图或N-S图表示算法;
6. 掌握书写程设计开发文档的能力 (书写课程设计报告) 。
第二章:概述
目的和意义:
本课程设计可加深对课堂理论学习的理解,增强动手能力,以培养学生合作的能力,为毕业设计作好实践环节上的准备。通讯录系统是在学校常见的计算机信息管理系统。它的主要任务是对学生信息进行管理,如学生信息的输入、查询、修改、增加、删除,迅速准确地完成各种学生信息的统计和查询。
主要内容:
本系统有分6个功能:(1)添加数据 (2)查询数据 (3)删除数据 (4)修改数据 (5)全部输出 (6)退出
其主要利用结构类型,指针,数组,函数等C语言知识来实现。
1.添加数据:输入姓名、电话号码及地址,即可添加数据。
2.查询数据:输入所要查询的姓名即可查询。
3.修改数据:输入所要修改的姓名,进行修改,保存后即成功。
4.删除数据:输入所要删除的姓名,确定后即成功。
5.输出数据:点击后即可查看所有保存的通讯录数据。
0.退出程序。
第三章:主要流程图
模块化设计
为实现系统功能,本程序主要分为五个模块。它们分别为:添加数据,查询数据,删除数据,修改数据,全部输出和退出。这五个函数再通过主函数调用分别得以实现。主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用通讯录的哪种功能。
系统功能模块结构图:
第四章:算法分析
整个系统主要包括五大模块:添加数据,查询数据,删除数据,修改数据和全部输出。各个算法分析如下:
主main函数:
Void input函数
主要利用if函数
查找数据
删除数据
修改数据 void modify函数
全部输出
第五章:测试及输出结果
主界面:
添加界面:
查询界面:
按姓名:
按号码:
删除界面:
按姓名:
按号码:
修改界面:
按姓名:
按号码:
输出界面:
退出界面:
第六章:课程设计体会
一、 对实验原理有更深的理解
通过该课程设计,掌握了什么是C语言程序设计,C语言程序设计的基本过程及其各阶段的基本任务,熟悉了C语言程序设计的流程图,了解了与C语言程序设计相关的技术,对课本上的知识有了更深的理解,课本上的知识是机械的,表面的。通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。
二、激发了学习的积极性
通过该课程设计,全面系统的理解了C语言程序设计构造的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的C语言程序设计的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对于C语言程序设计的认识是模糊的,概念上的,现在通过自己动手做实验,对C语言程序设计的认识更加深刻。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,将不必要的命令去除。在这次课程设计中,我就是按照实验指导的思想来完成。加深了理解VC的内部功能及内部实现,培养实践动手能力和程序设计能力的目的。
三、 总结
课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。 回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
我做的是通讯录系统,虽然是很简单的一个小的程序,但对我一个初学者来说却是一个很大的困难。更加是第一次做课程设计,所以第一天下午在机房做了一个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。特别是结构体,指针的部分,几乎是一片空白。不过经过几天的努力,大体上把课本上的知识点看了一遍,知识点也都基本是撑握了,所以下一步就是开始正式的编程序了。不过毕竟是个新手,还是不知如何下手,于是就在网上下了一篇类似的程序,经过仔细的研究,终于读懂了C语言编程的基本过程和方法。 经过一波三折,终于开始正式编程。
编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还必须强迫自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。所以认真仔细就是非常重要的了。开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。
通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。
在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前。
第七章:参考文献
1、C程序设计(第四版)
谭浩强 著
2、收集的各种网络资料
第八章:程序源代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define szSTR 64 /*指可以记录并保存64个通讯录,当然,可以再设置增加或减少*/
#define fileDB "c:\\contact.txt"/*指保存的目录*/
struct CONTACT {
char name[szSTR];/*姓名*/
char unit[szSTR];/*工作单位*/
char tele[szSTR];/*电话*/
char mail[szSTR];/*mail*/
};
typedef struct CONTACT CON;
#define BNAME 1
#define BUNIT 2
#define BTELE 4
#define BMAIL 8
#define BFULL 0xFF
int OPER[5] = {BFULL, BNAME, BUNIT, BTELE, BMAIL};
void input(CON * s, int mask)
{
if(mask & BNAME) { printf("请输入学生姓名:"); scanf("%s", s->name); }
if(mask & BUNIT) { printf("请输入工作单位:"); scanf("%s", s->unit); }
if(mask & BTELE) { printf("请输入联系电话:"); scanf("%s", s->tele); }
if(mask & BMAIL) { printf("请输入电子邮件:"); scanf("%s", s->mail); }
}/*end input*/
void show (int id, CON * s)
{
if(!s) return ;
if(id)
printf("%d\t%s\t%s\t%s\t%s\n",
id, s->name , s->unit , s->tele , s->mail );
else
printf("【姓名】%s【工作单位】%s【电话】%s【电邮】%s\n",
s->name , s->unit , s->tele , s->mail );
/*end if*/
}/*end show*/
void regist(void)
{
CON s; FILE * f = 0;
input(&s, BFULL);
f = fopen(fileDB, "ab");
fwrite(&s,sizeof(s),1,f);
fclose(f);
printf("资料已保存!\n");
}/*end regist*/
int browse(char * key, fpos_t * p, CON * s)
{
FILE * f =0; int i = 0, r = 0; CON t;
char * a = 0, * b = 0; fpos_t q;
if(!s) return 0;
f = fopen(fileDB, "rb");
if(!f) {
printf("数据库暂无记录\n");
return 0;
}/*end if*/
printf("编号\t姓名\t单位\t电话\t电邮\n");
printf("------------------------------------------------\n");
while(!feof(f)) {
fgetpos(f, &q);
r = fread(&t, sizeof(t), 1, f);
if(r<1)break;
if(t.name[0]==0) continue;
if(key) {
a = strstr(t.name , key);
b = strstr(t.tele , key);
if(a == 0 && b == 0) continue;
}/*end if*/
if(p) *p = q;
if(s) memcpy(s, &t, sizeof(t));
i++;
show(i, &t);
}/*end while*/
fclose(f);
printf("------------------------------------------------\n");
return i;
}/*end browse*/
fpos_t query(CON * s)
{
char key[szSTR]=""; fpos_t p = 0; int r = 0;
printf("请输入姓名或者电话号码:");
scanf("%s", key);
r = browse(key, &p, s);
return r?p:-1;
}/*end query*/
void clear(void)
{
FILE * f = 0; CON s;
fpos_t p = query(&s);
if(p<0) return;
f = fopen(fileDB, "rb+");
fsetpos(f, &p);
memset(&s, 0, sizeof(s));
fwrite(&s, sizeof(s),1, f);
fclose(f);
printf("记录已删除!\n");
}/*end clear*/
void modify(void)
{
FILE * f = 0; CON s; int cmd = 0;
fpos_t p = query(&s);
if(p<0) return;
f = fopen(fileDB, "rb+");
fsetpos(f, &p);
for(;;) {
show(0, &s);
printf("请选择:1-姓名;2-工作单位;3-电话;4-电邮;5-保存并退出;6-放弃修改并退出\n");
scanf("%d", &cmd);
switch(cmd) {
case 1:
case 2:
case 3:
case 4:
input(&s, OPER[cmd]);
break;
case 5:
fsetpos(f, &p);
fwrite(&s, sizeof(s), 1, f);
case 6:
fclose(f);
return;
default:
printf("错误的操作,请重新输入。\n");
}/*end case*/
}/*mext*/
}/*end clear*/
int main(void)
{
int cmd = 0; CON s;
for(;;) {
printf("\n\t\t\t\t欢迎使用本通信簿!");
printf("\n\t\t\t-------------1-添加--------------");
printf("\n\t\t\t-------------2-查询--------------");
printf("\n\t\t\t-------------3-删除--------------");
printf("\n\t\t\t-------------4-修改--------------");
printf("\n\t\t\t-------------5-全部输出----------");
printf("\n\t\t\t-------------0-退出--------------\n");
scanf("%d", &cmd);
switch(cmd) {
case 0: return 0;
case 1: regist(); break;
case 2: query(&s); break;
case 3: clear(); break;
case 4: modify(); break;
case 5: browse(0, 0, &s); break;
}//end case
}
return 0;
}
/*此程序存在一个弊端,在执行添加操作时,如果输完某个数据后加空格再输入一个数据时会有问题,想要知道,自己运行了看去 O(∩_∩)O哈哈~*/
优缺点:
1、此程序在运行时最好不要出现错误,不然会有麻烦,很难解决,这是本程序的弊端所在。
2、此程序所记录的通讯录为有限多个,暂时限定为64个,不过可以根据所需做出适当调整。
3、此程序界面简洁明了,易于操作,不失为一优点。