附表2
C++(或C)语言课程设计总结报告
注:该表格由学生填写,内容采用小四号宋体。
源代码:
/* 学生通讯录管理系统,能够实现对通讯录的内容进行创建、显示、查询、删除以及
修改等功能 */
# include<stdio.h>
# include<string.h>
# include<conio.h>
# include<ctype.h>
# define N 100
void myprint();
void mycreate(char num[N][12],char name[N][12],char tel[N][15],int *n);
void mydisplay(char num[N][12],char name[N][12],char tel[N][15],int n);
void mysearch(char num[N][12],char name[N][12],char tel[N][15],int n);
void mydelete(char num[N][12],char name[N][12],char tel[N][15],int *n);
void mymodify(char num[N][12],char name[N][12],char tel[N][15],int n);
/* 主函数 */
void main()
{
char choose,yes_no,num[N][12],name[N][12],tel[N][15];
int n=0;
do{
myprint();
choose=getch();
switch(choose)
{
case '1':mycreate(num,name,tel,&n);
break;
case '2':if(n==0)
{
printf("\n 无记录,请创建通讯录!\n");
break;
}
mydisplay(num,name,tel,n);
break;
case '3':if(n==0)
{
printf("\n 无记录,请创建通讯录!\n");
break;
}
mysearch(num,name,tel,n);
break;
case '4':if(n==0)
{
printf("\n 无记录,请创建通讯录!\n");
break;
}
mydelete(num,name,tel,&n);
break;
case '5':if(n==0)
{
printf("\n 无记录,请创建通讯录!\n");
break;
}
mymodify(num,name,tel,n);
break;
case '0': break;
default: printf("\n %c为非法选项!\n",choose);
}
if(choose=='0')
break;
printf("\n 要继续选择吗(Y/N)?\n");
do
{
yes_no=getch();
}
while(yes_no!='Y' && yes_no!='y' && yes_no!='N' && yes_no!='n');
}
while(yes_no=='Y'&& yes_no=='y');
}
/* 定义显示菜单界面的函数 */
void myprint()
{
printf(" 请输入选项编号(0-5): \n");
printf(" 1 创建通讯录 \n");
printf(" 2 显示通讯录 \n");
printf(" 3 查询通讯录 \n");
printf(" 4 删除通讯录中的记录 \n");
printf(" 5 修改通讯录 \n");
printf(" 0 退出 \n");
}
/* 定义创建通讯录的函数 */
void mycreate(char num[N][12],char name[N][12],char tel[N][15],int *n)
{
int i=0;
char tempnum[12],tempname[12],temptel[15];
printf("\n 请输入第1个记录: \n");
printf(" 学号(用#结束输入):");
do
{
gets(tempnum);
}
while(strcmp(tempnum," ")==0);
printf(" 姓名(用#结束输入):");
gets(tempname);
printf(" 电话号码(用#结束输入):");
gets(temptel);
while(tempnum[0]!='#' && tempname[0]!='#' && temptel[0]!='#')
{
strcpy(num[i],tempnum);
strcpy(name[i],tempname);
strcpy(tel[i],temptel);
i++;
printf("\n 请输入第%d个记录:\n",i+1);
printf(" 学号(用#结束输入):");
do
{
gets(tempnum);
}
while(strcmp(tempnum," ")==0);
printf(" 姓名(用#结束输入):");
gets(tempname);
printf(" 电话号码(用#结束输入):");
gets(temptel);
if(!isdigit(temptel[strlen(temptel)-1]))
break;
}
(*n)=i;
}
/* 定义显示通讯录的函数 */
void mydisplay(char num[N][12],char name[N][12],char tel[N][15],int n)
{
int i;
printf(" 学号 姓名 电话号码 \n");
for (i=0;i<n;i++)
printf("%12s%12s%15s\n",num[i],name[i],tel[i]);
}
/* 定义按学号查询通讯录的函数 */
void mysearch(char num[N][12],char name[N][12],char tel[N][15],int n)
{
int i;
char tempnum[12];
printf("\n 请输入要查询记录的学号:");
gets(tempnum);
for(i=0; i<n; i++)
if (strcmp(tempnum,num[i])==0)
{
printf(" 学号 姓名 电话号码\n");
printf("%12s%12s%15s\n",num[i],name[i],tel[i]);
}
else printf(" 无此人!\n");
}
/* 定义按学号删除通讯录中记录的函数 */
void mydelete(char num[N][12],char name[N][12],char tel[N][15],int *n)
{
int i,k;
char tempnum[12];
printf("\n 请输入要删除记录的学号:");
gets(tempnum);
for(k=0;k<(*n);k++)
if(strcmp(tempnum, num[k])==0)
break;
if(k<(*n))
{
for(i=k; i<(*n)-1;i++)
{
strcpy(num[i],num[i+1]);
strcpy(name[i],name[i+1]);
strcpy(tel[i],tel[i+1]);
}
(*n)--;
}
else printf(" 无此人!\n");
}
/* 定义修改通讯录的内容的函数 */
void mymodify(char num[N][12],char name[N][12],char tel[N][15],int n)
{
int i,find;
char c,tempnum[12], tempname[12], temptel[15];
printf("\n 请输入要修改记录的学号:");
gets(tempnum);
for(i=0;i<n;i++)
if(strcmp(tempnum,num[i])==0)
{
find=i; break;}
if(i==n)
printf("无此人!\n");
else
{
do
{
printf("\n 请输入正确的学号:");
do
{
gets(tempnum);
}
while(strcmp(tempnum," ")==0);
printf(" 请输入正确的学号:");
gets(tempname);
printf(" 请输入正确的电话号码:");
gets(temptel);
for(i=0;i<n;i++)
if((strcmp(tempnum,num[i])==0) && (i!=find))
{
printf(" 学号重复,要重新输入码(Y/N)?");
do
{
c=getche();
}
while(c!='Y' && c!='y' && c!='N' && c!='n');
break;
}
if(i==n)
{
strcpy(num[find],tempnum);
strcpy(name[find],tempname);
strcpy(tel[find],temptel);
break;
}
}
while(c=='y' && c=='Y');
}
}
目 录
(一) 设计目的…………………………………3
(二) 设计内容…………………………………3
(三) 总体设计…………………………………4
(四) 详细设计…………………………………5-10
(五) 调试与测试………………………………11
(六) 设计总结…………………………………12
《C语言课程设计》
通讯录管理系统
一、课程设计目的
1、 通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2、 通过课程设计,学会设计数据结构。其中包括对结构数组、数据文件等知识的运用。
3、 通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
4、 通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。
5、 通过课程设计,开发一个中小型系统,掌握系统研发全过程。
6、 通话课程设计,培养分析问题、解决实际问题的能力。
二、课程设计内容及要求:
设计一个实用的通讯录管理系统,能以简便高效的方式对通讯录进行管理和检索,具体要示:
(1) 录入:联系人信息包括:姓名,地址,电话。以结构数组或数据文件的形式存放通讯录信息。
(2) 更新:能插入、修改、删除通讯录信息。
(3) 浏览:按录入先后为序进行通讯录信息浏览。
(4) 查询:能实现指定联系人信息查询或指定电话号码查询功能。
(5) 系统以菜单方式工作,界面友好,易于操作,容错性好。
三、总体设计
1、模块化设计
为实现系统功能,本程序主要分为六个模块。它们分别为:录入联系人信息、删除联系人信息、查询联系人信息、增加联系人信息、浏览所以联系人信息、退出该程序。这六个函数再通过主函数调用分别得以实现。
主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用通讯录的哪种功能。然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。
其它各个函数的功能分别如下:
Enter函数用于录入通讯录中学生的信息;
Delet函数用于对通讯录中指定信息的删除;
Search函数用于对通讯录中指定信息的查询;
Add函数用于在通讯录中插入信息;
Modify函数用于对联系人进行修改;
Load函数用于对通讯录中所有信息进行浏览;
Quit函数用于退出系统。
2、模块调用图
四、详细设计
(1)数据结构设计
本程序中,运用了多种数据结构。首先对于通讯录中各项详细信息的记录用了结构体数组的形式,然后又运用switch语句来实现对分函数调用的开关功能,在文件的保存过程当中,还运用了数据文件的方式,每一次从终端输入的数据都以数据文件的形式保存到了磁盘,也可以从磁盘中讲文件内容读入内存中。
结构体及其成员如下:
struct people
{
char name[10];
char num[20];
char addr[50];
}pe[100];
(2)模块接口设计
本程序执行的入口是main函数,然后是菜单函数,在菜单函数中对选项进行选择以后,接下来在do-while语句中再套用switch语句实现对各个函数的调用。被调用的函数都是没有形参的,但是通过对数据文件的使用,可以使得每一次的函数调用都能够讲忘记保存到磁盘中,而不需要返回值。最后,再从main函数中结束整个程序的运行。
其中涉及到被调用的函数有:
void enter(); //录入函数
void delet(); //删出函数
void add(); //增加函数
void modify(); //修改函数
void search(); //查找函数
void load(); //浏览函数
void quit(); //退出函数
(3)流程图
enter函数:
N
Y
此函数的主要功能是将联系人添加到通讯录中;首先要确定将要输入的联系人的数量n,然后再根据j<n这一条件来循环输入联系人的信息,最好将联系人信息保存到文件中去,就完成了整个过程。
delet函数:
N
Y
N
Y
N
此函数要实现的功能是将选择的已有的联系人信息删除;首先用一个P<i为条件将已有信息全部显示出来,再由用户选择的联系人序号来确定要删除的联系人,当用户输入“y”、“Y”的时候就进行删除操作,否则就结束删除操作;在删除完一个联系人信息以后,如果选择继续删除,则又调用删除函数本身以实现循环删除功能。
add函数:
Y
N
此函数的功能是在原有联系人信息的基础上添加新的联系人信息;首先要讲文件指针指向文件末尾没有联系人的位置,然后在输入新的联系人信息,用标志变量flag的值来控制
循环添加新联系人信息,当添加完成后,保存信息并关闭文件,再返回主函数。
modify函数:
Y N
Y N
Y N
此函数的功能主要是给用户修改联系人信息,其中可以信息进行全部信息的修改和部分信息的修改;当输入要修改的联系人姓名时,系统将在已有联系人中查找匹配的姓名,要是没找到匹配姓名就退出修改程序,要是找到匹配项就进入修改选项,按提示执行就能完成对信息的修改。
Search函数
Y N
N N
Y Y
N Y Y N
N这一函数的功能主要是查找联系人信息的功能;其中有通过姓名查找和通过电话查找两种方式;要的按姓名查找,系统会在已有信息中查找匹配信息,要是找到就显示出来,要是在原有信息中不存在,就显示失败提示;同样,当按电话查找时也是先由系统查找匹配信息,要是未找到就显示查找失败,找到就将匹配信息显示出来;查询完成后还需要将信息保存到文件中去,再关闭文件完成查找工作,最好返回主函数。
五、调试与测试
(1) 调试过程中的主要问题
由于本程序是分模块设计的,所以运行时选择完任务并且执行完任务后,又会继续回到用户选择界面,供用户继续选择任务并执行任务,整个程序以文件形式读写,所以每次都可对输入的数据进行保存。对于本程序的调试运行,总体上情况良好。但是,其中也出现了一些小问题:
在这次程序调试中我还发现了return; 与break;的不同作用,其中break是只能用来结束它本身所在的本层循环,而return则是结束调用函数,让程序返回到主函数;还有用getchar()来接收输入字符时的回车符及让系统暂停,用system(“cls”)来清理屏幕显示,用system("pause")来让系统暂停等。
六、课程设计总结:
我想说课程设计真是一件很累人很伤脑筋的事情,在一周的时间里,我们每天几乎都要面对着电脑十个小时以上,上课时去机房写程序,回到宿舍还要继续奋斗;要是只是在电脑面前坐着也没有什么难过的,但是在电脑面前还要想着怎么去写代码,怎么去安排程序结构,怎么去实现想要的程序功能等等一系列的事情;特别是在调试程序的时候更是让人头痛,辛辛苦苦的写好了函数,等到调试运行就出现一堆错误,真的拿它没办法呀;有的时候还真是后悔当初自己选择了这样一个费精力的专业,不过还好有书本的基础知识、发达的网络通信、知识渊博的老师以及热心的同学的帮助,才使我能将那些问题一一解决!
虽然课程设计很苦很累,有时候还很令人抓狂,不过现在回想起来它给我的并不只是痛苦的回忆,它不仅让拉近了我和同学间的距离,而且对我们学习计算机语言还是很有意义的。
在还没有进行课程设计实训之前,我对C语言知识的掌握真的只能说是很肤浅,我只知道分开来使用那些语句和语法,对他们根本没有整体感念,所以在学习C语言时经常会感觉很盲目,甚至不知道自己学这些东西是为了什么。通过一周的课程设计,我对C语言有了更深入的了解,同时也建立起了一个对C语言的整体架构和编程思想;我还学到了很多课本上没有学到的东西,也了解了很多以前不了解的计算机语言方面的知识;他扩充了我的知识,也开拓了我的视野,让我们了解了我们学习计算机语言的目的和将来发展的方向。
通过这次的课程设计,让我明确了学习C语言的目的和重要性,在以后的时间里,我会更加努力的把C语言学好,为以后学习更高级的计算机语言打下好的基础,并通过与老师同学的交流来不断的提升自己的编程和开发能力!
附表2C或C语言课程设计总结报告源代码学生通讯录管理系统能够实现对通讯录的内容进行创建显示查询删除以及修改等功能includelt…
C语言程序设计实训总结为加强学生的实践动手能力,为贯彻落实教学计划的要求,培养学生的专业实践技能,计算机系05级计算机网络工程与管…
C语言程序设计课程设计报告专业电子信息工程自动化班级电信0904姓名陈列慧指导教师彭琼丁雄20xx年12月30日C语言程序课程设计…
C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的…
C语言课程设计参考例例子职工信息管理系统1用户分析11用户目的设计一个职工信息管理系统使之能提供以下功能1录入职工信息2显示职工信…
C课程设计报告题目小学算术运算测试设计者刘星刘俊良凌锋专业班级计算机网络0901班学号343337指导教师任长安所属系部计算机与信…
《C语言程序设计》课程设计报告专业:班级:姓名:指导教师:二零##年十二月二十六日目录一、设计题目2二、设计目的2三、设计内容23…
C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1…
武汉理工大学专业课程设计2课程设计说明书目录1基本功能描述12设计思路13软件设计431设计步骤44结论与心得体会127附设计中的…
武汉理工大学专业课程设计2课程设计说明书目录1基本功能描述12设计思路13软件设计431设计步骤432界面设计533关键功能的实现…
本次课程设计已经圆满结束了,通过这次课程设计,巩固和加深了学生对C语言基本知识和语言特点的理解和掌握,使学生熟练掌握了C语言编程和…