c语言课程设计大作业_第1页
c语言课程设计大作业_第2页
c语言课程设计大作业_第3页
c语言课程设计大作业_第4页
c语言课程设计大作业_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

郑州A%

课程报告

课程名称:C语言程序设计

专业班级:(15)班

学生姓名:谢*

学号:20127611***

任课教师:赵**

学期:2012-2013-2

课程报告任务书

通讯录管理系统

开发一个通讯录管理系统,基本信息包括:编号、姓名、性别、出生年月、固定电话、

手机号、电子邮件等基本信息(也可以根据自己情况进行扩充)•使之能提供以下基

本功能:

(1)通讯录等信息录入功能(注:数据等要求用文件保存)一一输入

(2)通讯录信息的浏览功能一一输出

主要(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):

内容①按电话号码进行查询②按姓名查询等③按照年龄排序④按姓名排序等

(4)通讯录条目的删除与修改等

扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理(2)报表打

印功能(3)模糊查询,如姓张的人员等;或者给定电子邮件的部分进行查询等(4)

给定指定年龄范围之内的查询等等。

总之,可以根据自己需求进行分析功能,成绩评定按照难度进行区分。

一、提交材料应包括:(1)系统源代码(2)课程报告

二、整个设计过程具体要求

(1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善

任务

各个模块的调用关系;

要求(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节

(函数名、参数、返回值等)

(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终

完成系统整体测试:

(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。

报告撰写情况(30分)系统完成方擎况(30分)答辩情况(40分)

内容规范程度程序测试基本功能扩展功能自述情况答辩情况

成绩20分5分5分20分10分10分30分总分

评定

成绩评定教师:

需求分析

1,具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。

2,数据包括:人名、工作单位、电话号码和E-MAIL地址。

3,可对记录中的姓名和电话号码进行修改。

4,可增加和删除记录。

5,可显示所有的保存记录。

6,可按人名或电话号码进行查询。

分析

建议采用结构体数组和文件系统实现。结构体成员包括人名、工作单位、电话号码和

E-MAIL地址。

根据题目的要求程序应该采用结构体数组和文件系统实现。应该有文件的操作功能;在程序

中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出的功能。

二、概要设计

(1).程序的模块组成及各个函数的功能:

程序的模块组成:

主函数:main();

输出数据函数:printf();

读取数据函数:scanf();

显示记录函数:Display();

删除记录函数:shanchu();

查找记录函数:chaxun();

自定义清屏函数:system("cis");

自定义输入函数:input();

字符输入函数:getchar();

修改数据函数:xiugai();

保存数据函数:baocunO;

排序数据函数:paixuO;

各函数的主要功能:

输出数据函数:随时输出数据;

读取数据函数:读取输入的数据信息;

显示菜单函数:显示可供选择的主菜单;

显示记录函数:显示通讯录所有输入的信息;

删除记录函数:显示要删除的通讯录所有输入的信息;

查找记录函数:显示要查询的通讯录所有输入的信息;

自定义清屏函数:清除前面运行留下的信息;

自定义输入函数:输入通讯录的成员;;

字符输入函数:从终端输入一个字符,遇回车键返回;

修改数据函数:修改通讯录的成员信息;

保存数据函数:保存通讯录的成员信息;

排序数据函数:排序通讯录的成员信息;

(2)程序中的抽象数据类型的定义:

用户的状态结构

用户

(

编号:

姓名:

电话;

年龄;

邮箱:

地址;

(3)总体流程图

根据上面的分析,可以将程序系统的设计分为如下几个模块:插入、显示、删除、查询、修改、保存和退

出。

)

三.详细设计

(1).主菜单;

主菜单一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方

式选择。

流程图

【程序】

Personpe[80];

intmenu_select()

(

charc;

do{

system(MclsM);〃清屏

printf("\t\t\t**********************************************\n");〃窗口初始化

printf(''\t\t\t**********欢迎使用通讯录管理系统!***********\"”);

printf(''\t\t\t*************.I***************f・

printf("\t\t\t**************1.添力口记录***************\n");

printf("\t\t\t**************|2.显示记录|***********弥);

printf("\t\t\t**************|3.删除记录|****************5”);

printf("\t\t\t**************|4.查询记录|***************

printfC't't't**************|5.修改记录|****************W'')・

printf(''\t\t\t**************|6.保存记录|¥¥************¥亭孝'')•

pi»jntf("\t\t\t**************|7.排序记录|*****************5”)・

printf("\t\t\t**************|0.退出程序|*****************\n”)・

printf("\t\t\t**************、****************5“)•

printf(H\t\t请您选择(0・7)严);

c=getchar();

}while(c<,0,||c>,7,);

return(c-*O*);

)

(2)显示模块

此模块为显示所有记录,流程图如下:

voidDisplay(Personper[],intn)

(

Inti;

printf("------------------------------------------------------

n");〃格式

printf("编号\t姓名\t年龄\t电话号码\t通讯地址\t电子邮箱'n");

printf("------------------------------------------------------

n");

for(i=l;i<n+l;i++)

printf(/z%-8d%-8s%-8s%-18s%-18s%-8s\n/z,per[i-l].score,per[i-1].name,per[i-1].age

,per[i-1].num,per[i-1].adds,per[i-l].email);

if(i>l&&i%10==0)

{printf("\t------------------------------------------\n");

printf;

system("pause");

printf("\t------------------------------------------\n");

})

printf("------------------------------------------------------------------------------------\

n");

system("pause");

(3)修改模块

此模块先调用查找函数查找到所要修改的信息,然后用户根据需要修改信息。流程图如下:

voidxiugai(Personper[],intn)

chars[20];

inti=0;

printf(〃\t请输入想修改的记录中的名字:〃);

scanf(〃%s",s);〃输入修改人的名字

while(strcmp(per[i].name,s)!=0&&i<n)i++;

if(i==n)

printf("\t通讯录中没有此人!\n");

return;

)

printfC\t编号:");

scanf&per[i].score);

printf(*\t姓名:");

scanfper[i].name);

printf(*\t年龄:");

scanf("\t%s",per[i].age);

printff\t电话号码:");

scanfper[i].num);

printf(*\t通讯住址:");

scanfper[i].adds);

printfC\t电子邮箱;

scanf(*\t%s*,per[i].email);

printf("\t修改成功”);}

(4)插入模块

此模块为插入信息模块,插入后再调用保存函数来保存所插入的数据,支持多条信息的插入。

流程图

intInput(Personper[],intn)

inti=0;

charsign,x[10];

while(sign!=,n&&sign!=,N')

printf(*\t编号:”);

scanf&per[n+i].score);

printf(*\t姓名:〃);

scanfper[n+i].name);

printf(*\t年龄:");

scanfper[n+i].age);

printf(*\t电话号码:");

scanfper[n+i].num);

printf("\t通讯住址:");

scanfper[n+i].adds);

printf(*\t电子邮箱:");

scanf(*\t%s^>per[n+i].email);

gets(x);

printf("\n\t是否继续添加?(Y/N)”);

scanffesign);

i++;

)

return(n+i);

)

(5)删除模块

此模块先利用查找模块找到所要删除的信息,然后根据用户的选择来确定是否删除信息,此

种调用到Save函数。其流程图如下:

intshanchu(Personper[],intn)

(

chars[20];

inti=0,j;

printfC\t请输入想删除记录中的名字:");

scanfs);

while(strcmp(per[i].name,s)!=0&&i<n)i++;

if(i==n)

printf("\t通讯录中没有此人!\n");

return(n);

)

for(j=i;j<n-l;j++)

(

strcpy(per[j].num,per[j+1].num);

strcpy(per[j].name,per[j+1].name);

strcpy(per[j].age,per[j+1].age);

strcpy(per[j].adds,per[j+1].adds);

strcpy(per[j].email,per[j+l].email);

)

printf(*\t\t\t已经成功删除!\n");

return(n-l);

)

(6)查询模块

voidchaxun(Personper[],intn)

(

intm;

printf("\t\n请选择查询方式:\n");

printf(*\t।------------------1\n");

printf("\t|1-----姓名查询|\n〃);

printf(*\t12-----电话查询|\n");

printf("\t|3-----地址查询|\n");

printf(*\t|4-----返回|\n");

printfC\t1------------------1\n");

printf("请选择:");

scanf("%d",&m);

while(m!=l&&m!=2&&m!=3&&m!=4)

printf(〃输入错误请重新选择:〃);

scanf("%d",&m);

)

if(m==l)

(

chars[20];

inti=0;

printfC\t请输入想查询的姓名:”);

scanfs);

while(strcmp(per[i].name,s)!=0&&i<n)i++;

if(i=n)

(

printf("\t通讯录中没有此人!\n");

return;

)

printf("\t此人编号:%d\n*,per[i].score);〃输出查询结果

printf(*\t此人年龄:%s\n",per[i].age);

printf(*\t电话号码:%s\n*,per[i].num);

printf("\t通讯地址:%s\n*,per[i],adds);

printf(*\t电子邮箱:%s\n*,per[i].email);

);

if(m==2)

(

chars[20];

inti=0;

printf("\t请输入想查询的电话:");scanf("\t%s",s);

while(strcmp(per[i].num,s)!=0&&i<n)i++;

if(i==n)

printff\t通讯录中没有此人!\n〃);

return;

printf("\t此人编号:%d\n",per[i].score);〃输出查询结果

printf("\t此人姓名:%s\n”,per[i].name);

printf(*\t此人年龄:%s\n",per[i].age);

printf("\t通讯地址:%s\n”,per[i].adds);

printf(*\t电子邮箱:%s\n*,per[i].email);

);

if(m==3)

chars[20];

inti=0;

printf(〃\t请输入想查询的地址:〃);

scanfC\t%s*,s);

while(strcmp(per[i].adds,s)!=0&&i<n)

i++;

if(i=n)

printf(*\t通讯录中没有此人!\n〃);

return;

printf("\t此人编号:%d\n",per[i].score);〃输出查询结果

printf("\t此人姓名:%s\n”,per[i].name);

printfC"\t此人年龄:%s\n*,per[i].age);

printf(*\t电话号码:%s\n*,per[i].num);

printf(*\t电子邮箱:%s\n*,per[i].email);

);

(7)排序模块

voidpaixu(Personper[],intn)

inti,j;

//printf(〃\t\按编号排序:\n〃);

for(i=l;i<n+l;i++)

(

for(j=l;j<n-l;j++)

if((strcmp(per[j].num,per[j+1].num))>0)

(

strcpy(per->num,per[j].num);

strcpy(per->name,per[j].name);

strcpy(per->age,per[j].age);

strcpy(per->adds,per[j].adds);

strcpy(per->emai1,per[j].email);

strcpy(per[j+1].num,per->num);

strcpy(per[j+1].name,per->name);

strcpy(per[j+1].age,per->age);

strcpy(per[j+1].adds,per->adds);

strcpy(per[j+1].email,per->email);

)

}

printf("排序成功!\n〃);

)

五.测试结果

L主菜单

2.显示所有信息

通讯录记录表

富春一一证互一一洋品一一句词*函Siw席而藉

蔡福丽£一二一

3.插入信息

欢迎使用通讯录管理系统?XXXXXXiX

记录

1添

2录

.己

3录

4己

5_己

6己

^录

7己

0^漳

请您选择《0-7〉:1

1

号1

码1

址1

箱1

是否继续添加?<Y/N)

4.查找模块

第一步:

在通讯录中查找记录

青选择查询方式:

姓春

1查

2查

舞址

3询

4返回

岗择

主t

T

RA

主,择1

想查

询的

姓名1

人1

5:阳1

如1

讯1

邮1

-怅续

m

里入

^的电话1

编1

(

人1

#4:

人1

^

地1

^讯

^^1

{子

5«:忌

第四步:

请选择:

千入

询的

3址

想1

人i

号.

姓.

人.l

年.

话.i

号.

箱.

子l

邮.

续.•

5.删除模块

****-***欢迎使用通讯录管理系统?-*-****-

1记

2录

3记

4记

5记

6记

7记

0番

请您选择〈0-7):3

丛通迅录中删除记录…

青输入想删徐记录巾的名字:1

已经成功删除?

6.修改模块

第一步

XXXXXXXXXX欢迎使用通讯录管理系统,………

1记录

2录

3记

4记

5^^记

6记

7录

^M记

0漳

请您选择《0-7〉:5

姓^:?

年龄:?

5:?

^讯

^子

改:?

囱中的

讯录

中的

输名字

修2

讯史

按忌

•••

六.课程心得总结

刚开始学习C语言,总觉得很难理解,也很难学。在这之前,我们已经学习了一个学期,

对C语言有了一定的了解,但是也仅仅是停留在学习了解的范围,对里面的好多东西还是很

陌生,并不是很熟练,有着许多欠缺,更多的在运用起来的时候还是感到很不好动手。

这次的程序设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。自己

动手发现和解决问题。通过这,我发现了自己的许多不足,平时没有掌握好的知识在这次实

验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行解决其中大部分问题。当然,

还存在一些问题没有解决。我相信在以后的学习能够解决好它们。

课堂上许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是

不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过上机练习,对于

语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的

语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,

更加巩固了学过的知识,而且在设计的时候学要系统的知识,也是一个较大的挑战,某一方

面知识的欠缺都将影响到整个程序的设计。

这次的大作业让我学到了很多有用的东西,巩固了之前的学习,通过这个程序的学习,

使我进一步理解和运用结构化程序设计的思想和方法。相信对以后初步掌握开发一个小型实

用系统的基本方法,学会调试一个比较长程序的基本方法,学会利用流程图表示算法,进一

步掌握和提高利用C语言进行程序设计的能力。

我认为,这次实习对于我是非常有意义的,对我个人的影响比较大,对我的动手能力

有了很大的提高。通过这次课程设计,我对很多的函数有了新的认识,也学会了运用多种函

数。最后感谢完成大作业过程中帮助过我的老师和同学。

源代码:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

typedefstruct

(

charscore;/*编号*/

charname[10];/*姓名*/

charnum[15];/*号码*/

charemai1[20];/*邮箱*/

charage[8];/*年龄*/

charadds[20];/*地址*/

}Person;

Personpe[80];

intmenu_select()

charc;

do(

system("cls");

printf("\t\t\t**********************************************\n");//窗口初始化

printf("\t\t\t**********欢迎使用通讯录管理系统!***********\n");

printf(\t\t\t*************।-।***************\n),

printf("\t\t\t**************1.添加记录***************\n");

printf("\t\t\t**************|2.显示记录|****************"");

printf("\t\t\t**************|3.删除记录|****************\n");

printf("\t\t\t**************|4.查询记录|****************\n");

printf("\t\t\t**************|5.修改记录|****************\n");

printf("\t\t\t**************|6.保存记录|****************\n");

printf("\t\t\t**************|7.排序记录|****************\n");

printf("\t\t\t**************|0.退出程序|****************\n");

printf("\t\t\t**************」」****************\n");

printf("\t\t请您选择(0-7);

c=getchar();

}while(c<J0>||c>>7J);

return(c,O');

}

voidpaixu(Personper[],intn)

inti,j;

//printf(〃\t\按编号排序:\n");

for(i=l;i<n+l;i++)

for(j=l;j<n-l;j++)

if((strcmp(per[j].num,per[j+l].num))>0)

(

strcpy(per->num,per[j].num);

strcpy(per->name,per[j].name);

strcpy(per->age,per[j].age);

strcpy(per->adds,per[j].adds);

strcpy(per->emai1,per[j].email);

strcpy(per[j+1].num,per->num);

strcpy(per[j+1].name,per->name);

strcpy(per[j+1].age,per->age);

strcpy(per[j+1].adds,per->adds);

strcpy(per[j+1].email,per->email);

}

}

printf("排序成功!\n");

)

intInput(Personper[],intn)

(

inti=0;

charsign,x[10];

while(sign!=,n&&sign!=,N')

(

printf(^Xt编号:");

scanf&per[n+i].score);

printfC\t姓名:〃);

scanfper[n+i].name);

printf("\t年龄:");

scanfper[n+i].age);

printf("\t电话号码:“);

scanfper[n+i].num);

printf("\t通讯住址:“);

scanfper[n+i].adds);

printfC\t电子邮箱:〃);

scanfper[n+i].email);

gets(x);

printfC\n\t是否继续添加?(Y/N)");

scanf("\t%c”,&sign);

i++;

)

return(n+i);

)

voidScan(Personper[],intn)

(

inti;

FILE*fp;

if((fp=fopen("record,txt","rb"))==NULL)〃打开文件

(

printf("不能打开文件!\n");

exit(l);

)

fscanf(fp,"%d",&n);〃读入记录数

//fseek(fp,0,1);

for(i=0;i<n;i++)

fscanf(fp,z,%-5d%-8s%-6s%-13s%-15s%-15s\n*,per[i-l].score,per[i-l].name,per[i-l]

.age,per[i-l].num,per[i-l].adds,per[i-l].email);

fclose(fp);

printf(^\t\t*************文件数据读入成功!*************\n*);

)

voidDisplay(Personper[],intn)

(

inti;

printf("------------------------------------------------------------------------------------\

n");/*格式*/

printf(〃编号\t姓名\t年龄\t电话号码\t通讯地址\t电子邮箱\n");

printf(*------------------------------------------------------------------------------------\

n〃);

for(i=l;i<n+l;i++)

printf-8d%-8s%-8s%-18s%-18s%-8s\n”,per[i-l].score,per[i-l].name,perage

,pernum,per[i-1].adds,per[i-1].email);

if(i>l&&i%10==0)

(

printf("\t-------------------------------------\n");

printf("\t");

system("pause");

printf(^Xt--------------------------------------\n");

)

)

printf("----------------------------------------------------------------------------\

n");

system("pause");

}intshanchu(Personper[],intn)

(

chars[20];

inti=0,j;

printfC\t请输入想删除记录中的名字:");

scanfs);

while(strcmp(per[i].name,s)!=0&&i<n)i++;

if(i==n)

(

printfC\t通讯录中没有此人!\n");

return(n);

}

for(j=i;j<n-l;j++)

strcpy(per[j].num,per[j+l].num);

strcpy(per[j].name,per[j+l].name);

strcpy(per[j].age,per[j+l].age);

strcpy(per[j].adds,per[j+l].adds);

strcpy(per[j].email,per[j+l].email);

)

printf(*\t\t\t已经成功删除!\n");

return(n-l);

)

voidchaxun(Personper[],intn)

(

intm;

printf(*\t\n请选择查询方式:\n");

printf(*\t।------------------1\n");

printfC\t|1-----姓名查询|\n〃);

printf(*\t12-----电话查询|\n");

printf(*\t|3-----地址查询|\n*);

printf(*\t|4-----返回|\n");

printfC\t1------------------1\n");

printf("请选择:");

scanf&m);

while(m!=l&&m!=2&&m!=3&&m!=4)

(

printf(〃输入错误请重新选择:");

scanf(线d",&m);

)

if(m==l)

(

chars[20];

inti=0;

printf(〃\t请输入想查询的姓名:");

scanf("\t%s”,s);

while(strcmp(per[i].name,s)!=0&&i<n)i++;

if(i=n)

printf("\t通讯录中没有此人!\n");

return;

printf(*\t此人编号:%d\n",per[i].score);

printf("\t此人年龄:%s\n",per[i].age);

printf(*\t电话号码:%s\n",per[i].num);

printf(*\t通讯地址:%s\n",per[i].adds);

printf(*\t电子邮箱:%s\n*,per[i].email);

);

if(m==2)

chars[20];

inti=0;

printf("\t请输入想查询的电话:");scanf('\t%s",s);

while(strcmp(per[i].num,s)!=0&&i<n)i++;

if(i==n)

printfC\t通讯录中没有此人!\n");

return;

}

printf(*\t此人编号:%d\n",per[i].score);

printf(*\t此人姓名:%s\n",per[i].name);

printf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论