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

下载本文档

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

文档简介

C语言课程设计大

作业

文档仅供参考

郑外I大学

课程报告

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

专业班级:(15)班

学生姓名:谢*

学号:7611***

任课教师:赵**

学期:*

课程报告任务书

通讯录管理系统

文档仅供参考

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

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

以下基本功能:

(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。;

查找记录函数:chaxunQ;

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

自定义输入函数:input。;

文档仅供参考

字符输入函数:getchar();

修改数据函数:xiugai();

保存数据函数:baocun();

排序数据函数:paixu();

各函数的主要功能:

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

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

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

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

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

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

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

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

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

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

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

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

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

用户的状态结构

用户

(

编号:

姓名:

文档仅供参考

电话;

年龄;

邮箱:

地址;

⑶总体流程图

根据上面的分析,能够将程序系统的设计分为如下几个模块:插入、显示、

删除、查询、修改、保存和退出。

三.详细设计

(1).主菜单;

主菜单一般设计得比较简洁,只提供输入,处理和输出部分的函数调

用。其中各功能模块用菜单方式选择。

流程图

文档仅供参考

【程序】

Personpe[80];

intmenu_select()

charc;

do{

system(,'cls,');〃清屏

printf(''\t\t\t**********************************************\ii'');〃窗

口初始化

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

printf(''\t\t\t*************|*I***************\n”);

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

printf(n\t\t\t**************|2.显示记录****************'n'')•

printf(H\t\t\t**************|3.删除记录****************'n'')•

printf(H\t\t\t**************|4.查询记录****************'n'')•

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

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

文档仅供参考

printf(H\t\t\t**************|7.排序记录|*****************\nn)«

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

printf(''\t\t\t******************************'n'')•

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

c=getchar();

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

return(c-'O');

)

(2)显示模块

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

Inti;

printf(n.......................................................................................................\nn);〃格式

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

printf(n.......................................................................................................\n);

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

文档仅供参考

printf(,'%-8d%-8s%-8s%-18s%-18s%-8s\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);

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

{printf(u\t................................................\nH);

printf(n\tn);

system(*'pause*');

printf(u\t................................................\nu);

})

prin(f("................................................................................................\n");

system(,'pausen);

(3)修改模块

此模块先调用查找函数查找到所要修改的信息,然后用户根据需要修改信

息。流程图如下:

文档仅供参考

voidxiugai(Personper[],intn)

{

chars[20];

inti=0;

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

scanfC'%sn,s);〃输入修改人的名字

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

if(i==n)

{

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

return;

)

printf(n\t编号:");

scanf(n\t%dn,&per[i].score);

文档仅供参考

printf(”\t姓名:");

scanf(*'\t%sn,per[i].name);

printf("\t年龄:");

scanf(n\t%sn,per[i].age);

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

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

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

scanf(n\t%sn,per[i].adds);

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

scanf(n\t%sn,per[i].email);

printf(u\t*');}

(4)插入模块

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

持多条信息的插入。

流程图

文档仅供参考

intInput(Personper[],intn)

|

inti=0;

charsign,x[10];

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

{

prmtf(H\t编号:

scanf(u\t%d*',&per[n+i].score);

printf("\t姓名:");

scanf(*'\t%s*',per[n+i].name);

prmtf(H\t年龄:");

scanf(n\t%sn,per[n+i].age);

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

文档仅供参考

scanf(,'\t%s,',per[n+i].num);

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

scanf('*\t%s'*,per[n+i].adds);

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

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

gets(x);

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

scanf(,'\t%c,,,&sign);

i++;

)

return(n+i);

)(5)删除模块

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

否删除信息,此种调用到Save函数。其流程图如下:

文档仅供参考

intshanchu(Personper[],intn)

chars[20];

inti=O,j;

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

scanf(,'%s,',s);

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

if(i==n)

{

printf(u\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(n\t\t\t已经成功删除!\n");

return(n-l);

}

(6)查询模块

voidchaxun(Personper[],intn)

|

intm;

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

printf(n\t।---------------------!\nn);

printf(n\t|1.....姓名查询|\n'*);

prmtf(H\t|2----电话查询|\n'*);

printf(H\t|3.....地址查询|\n'*);

printf(n\t|4.....返回|\nn);

printf(n\t1--------------------\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;

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

scanf(n\t%sn,s);

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

if(i==n)

{

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

return;

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

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

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

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

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

);

if(m==2)

文档仅供参考

chars[20];

inti=0;

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

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

if(i==n)

{

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

return;

)

printf(u\t此人编号:%d\n*',per[i].score);/爆I出查询结果

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

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

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

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

);

if(m==3)

{

chars[20];

inti=0;

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

scanf(n\t%sn,s);

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

文档仅供参考

i++;

if(i==n)

{

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

return;

)

printf(n\t此人编号:%d\n”,per[i].score);/爆I出查询结果

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

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

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

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

);

}

(7)排序模块

voidpaixu(Personper[],intn)

{

intij;

//printf("\t\按编号排序

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

{

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

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

文档仅供参考

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->email,per[j].email);

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

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

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

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

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

)

)

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

)

五.测试结果

L主菜单

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

1记

2记

3记

4记

5记

6记

7记

0

请您选择

2.显示所有信息

文档仅供参考

通讯录记录表

露*一一通一一藕一一国与百甫痴痴症国有福

iwSSSSSS.T?-'

3.插入信息

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

1录

2录

3记

4胃

5_录

6录

^记

7

0^记

_-_

请您选择(0-7〉:i

1

号1

讯:l

t码

w址

s箱

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

4.查找模块

第一步:

在通讯录中查找记录

青选择查询方式:

-一

1鲁普

2香

北址

3一

4返回

青选择:

第二步:

文档仅供参考

货入

询的

名1

^编

人i

S-距

此i

电i

邮:

«忌1

%••

第三步:

,青选择:2

请蒯入想查询的电话

此人编号:i

此人姓名:1

此人年凝]

福册地址:1

国W箱:1

甯按任盍键继续..•

第四步:

/的

编1

此人

姓#:

盒1

年1

号1

子1

s=忌

夕••

5.删除模块

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

1记录

2录

3记

4记

5^记

6记

7录

0盖

请您选择《0-7):3

丛通迅录中删除记录心入…

请输入想删除记录市的名字:1

已经成功删除,

造将件意键继绩...

6.修改模块

第一步

文档仅供参考

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

1记录

2录

*记

3录

4罂

H录

5H

6录

7录

0霍

请您选择《。-7):5

改通讯录中的记录

请公想修改的记录中的名字

姓^

年龄:?

电S

子霹号

丽箱:?

改请按任意键继续...

窗双

中的

讯录

I录

T

-

中的

名字

,.

记2

l录

里.

任•

I目••■

文档仅供参考

六.课程心得总结

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

学习了一个学期,对c语言有了一定的了解,可是也仅仅是停留在学习了

解的范围,对里面的好多东西还是很陌生,并不是很熟练,有着许多欠缺,

更多的在运用起来的时候还是感到很不好动手。

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

一次大检验。自己动手发现和解决问题。经过这,我发现了自己的许多不

足,平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不

断查阅资料和上机运行解决其中大部分问题。当然,还存在一些问题没有解

决。我相信在以后的学习能够解决好它们。

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

记住,死记硬背是不可取的。然而要使用C语言这个工具解决实际问题,

又必须掌握它。经过上机练习,对于语法知识有了感性的认识,加深对它的

理解,在理解的基础上就会自然而然地掌握C语言的语法规定。对于一些

内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加

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

战,某一方面知识的欠缺都将影响到整个程序的设计。

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

这个程序的学习,使我进一步理解和运用结构化程序设计的思想和方法。相

信对以后初步掌握开发一个小型实用系统的基本方法,学会调试一个比较长

程序的基本方法,学会利用流程图表示算法,进一步掌握和提高利用C语

言进行程序设计的能力。

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

文档仅供参考

大,对我的动手能力有了很大的提高。经过这次课程设计,我对很多的函数

有了新的认识,也学会了运用多种函数。最后感谢完成大作业过程中帮助过

我的老师和同学。

源代码:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

typedefstruct

{

charscore;/*编号*/

charname[10];/*姓名*/

charnum[15];/*号码*/

charemail[20];/*邮箱*/

charage[8];/*年龄*/

charadds[20];/*地址*/

JPerson;

文档仅供参考

Personpe[80];

intmenu_select()

charc;

do{

system,ds");

printf(*'\t\t\t**********************************************\n*');//窗

口初始化

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

printf(,\t\t\t*************『]***************\n'');

printf('\t\t\t**************1.添加记录***************'n'')•

printf(,\t\t\t**************I2.显示记录****************'n'')•

printf('\t\t\t**************I3.删除记录****************'n'')•

printf(,\t\t\t**************I4.查询记录****************\n'')•

printf('\t\t\t**************I5.修改记录****************'n'')•

printf(,\t\t\t**************I6.保存记录****************'n'')•

printf('\t\t\t**************I7.排序记录****************'n'')•

printf(,\t\t\t**************I0.退出程序****************\n'')•

printf('\t\t\t******************************'n'')•

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

c=getchar();

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

return(c-'O');

文档仅供参考

voidpaixu(Personper[],intn)

{

intij;

//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))>O)

{

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->email,per[j].email);

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

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

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

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

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

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

文档仅供参考

intInput(Personper[],intn)

{

inti=0;

charsign,x[10];

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

{

printf(H\t编号:");

scanf(*'\t%d*',&per[n+i].score);

printf("\t姓名:");

scanf(*'\t%s*',per[n+i].name);

printf(H\t年龄:");

scanf(n\t%sn,per[n+i].age);

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

scanf(*'\t%s*',per[n+i].num);

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

scanf(*'\t%s*',per[n+i].adds);

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

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

gets(x);

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

scanf(',\t%c',,&sign);

i++;

文档仅供参考

return(n+i);

voidScan(Personper[],intn)

|

inti;

FILE*fp;

if((fp=fopen(nrecord.txt"Jrb"))==NULL)〃打开文件

{

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

exit(l);

)

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

//fseek(fp,O,l);

for(i=0;i<n;i++)fscanf(fp,,'%-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);

*********文件数据读入成功!*************\n'');

)

voidDisplay(Personper[],intn)

|

inti;

printf("................................................................................................\n");

文档仅供参考

/*格式*/

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

prin(f("................................................................................................\n");

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

{

printf(,'%-8d%-8s%-8s%-18s%-18s%-8s\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);

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

{

printf(u\t...............................................\nn);

printf(n\tn);

system(*'pause*');

printf(u\t................................................\nn);

)

}prin(f("................................................................................................\n");

system(npausen);

}intshanchu(Personper[],intn)

{

chars[20];

inti=O,j;

printf("请输入想删除记录中的名字:");

scanf(n%sn,s);

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

文档仅供参考

if(i==n)

printf(n\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+1].email);

)

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

return(n-l);

)

voidchaxun(Personper[],intn)

{

intm;

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

printf(*'\t।-----------------------!\nu);

printf(n\t|1........姓名查询|\n'*);

文档仅供参考

printf(H\t|2.......电话查询|\nH);

printf(n\t|3.......地址查询|\nH);

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

printf(n\t1--------------------\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;

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

scanf(,'\t%s,',s);

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

if(i==n)

(

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

return;

)

文档仅供参考

printfC'Xt此人编号:%d\n'*,per[i].score);

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

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

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

printfC'Xt电子邮箱:%s\n*',per[i].email);

);

if(m==2)

{

chars[20];

inti=0;

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

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

if(i==n)

{

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

return;

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

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

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

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

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

文档仅供参考

);

if(m==3)

{

chars[20];

inti=0;

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

scanf(u\t%s,',s);

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

if(i==n)

{

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

return;

printf(H\t此人编号:%d\n'*,

温馨提示

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

评论

0/150

提交评论