C语言课设.docx
《C语言课设.docx》由会员分享,可在线阅读,更多相关《C语言课设.docx(16页珍藏版)》请在冰豆网上搜索。
C语言课设
*********
课程设计报告
课程名称高级语言程序设计
设计题目******************
专业****************
班级
学号
姓名
完成日期2018年8月88日
课程设计任务书
设计题目:
好友信息管理软件
设计内容与要求:
内容:
对好友信息进行管理,好友信息包括姓名、年龄、性别、住址、QQ、电话等。
要求:
(1)系统以菜单方式工作
(2)好友信息输入功能(好友信息以文件形式保存)。
(3)输出好友信息功能。
(4)查询功能,并设定子菜单,按姓名查询、按电话号码查询。
(5)对指定好友的信息进行删除和修改功能。
指导教师:
_______________
年月日
课程设计评语
成绩:
指导教师:
_______________
年月日
【问题描述】
假设自己有好友若干,首先确定输入好友的数量;然后按照姓名的排序依次输入各好友信息,并使用文件的操作保存信息于磁盘当中。
在菜单中选择查询选项并且按照按姓名或者电话号码来查找好友信息。
通过输入好友姓名来删除好友信息,或者修改好友信息的任意一项,如果认识了新的好友,可以添加好友信息。
【基本要求】
一、输入的形式和输入值的范围
形式:
用scanf输入自己好友的姓名、性别、年龄、住址、QQ、电话各项信息。
输入一项信息按一次空格。
最后输入完一个好友信息就按一次回车键,结束输入。
输入值的范围:
姓名为字符串型20个字节charname[20];
性别为字符串型,6个字节charsex[6];
年龄为整型,intage;
住址为字符串型,50个字节charadress[50];
QQ号码为字符串型,15个字节charQQ[15];
电话为字符串型,输入15位数字chartel[15]。
二、输出的形式
输出是以表格的形式输出,即表格的第一行是第一个好友的信息,第二行是第二个好友的信息,依次类推。
三、程序所能达到的功能
对好友信息进行管理,好友信息包括姓名、性别、年龄、住址、QQ、电话。
(1)系统以菜单方式工作
(2)好友信息输入功能(好友信息以文件形式保存)。
(3)输出好友信息功能。
(4)查询功能,并设定子菜单,按姓名查询、按电话号码查询。
(5)对指定好友的信息进行删除和修改功能。
【测试数据】
输入:
设输入三个好友信息,好友姓名是字符串型。
预期的输出结果:
预期的输出结果请参见程序后的运行结果。
【数据结构】
好友信息的录入采取结构体数组的形式,每个结构体元素包含6个关键字段,其类型描述为:
#include
#include//包含字符串处理函数的头文件,可以直接调用
现有的字符串处理的一系列函数
#include//清屏功能
structhaoyou//声明一个结构体类型structhaoyou
{
charname[20];//好友姓名为字符串
charsex[6];//性别为字符串
intage;//年龄为整型
charadress[50];//地址为字符串
charQQ[15];//QQ为字符串
chartel[15];//电话为字符串
}
【算法思想】
利用结构体数组存放所有好友的信息,输入后,在输出时对好友信息表格式输出,然后可以执行子菜单按好友姓名对指定好友进行删除和修改功能。
可以按照姓名或者电话号码对好友进行查询,然后表格化输出,如果有新的好友加入,还可以添加好友信息。
【总体设计】
主菜单包括:
输入函数、浏览函数、修改函数、删除函数和查询函数。
图1-1好友信息管理总体设计
【模块划分】
一、主函数:
main()
显示系统工作菜单,罗列该系统的所有功能。
声明所有将会调用的被调函数,再运用选择switch函数即可根据使用者所输入的功能代号进入对应的功能程序。
并且对菜单做了一个循环,进行完一个选择后,按回车键可进行清屏功能,把屏幕上除了菜单都清空,然后可以继续选择那些哪项任务,这样可以方便使用者使用,并且每一步都很清晰。
以0退出系统。
二、输入函数:
voidadd()
在该程序的前面已经定义了一个结构体structhaoyou用来储存好友的所有信息,(姓名、性别、年龄、住址、QQ、电话)。
定义一个n,n是输入好友的个数,依次输入好友的信息,直到输入个数为n时结束输入,好友个数控制循环。
三、读取函数:
intreads(haoyoustu[N])
读取好友文件中的内容,如若文件不存在则输出文件打开失败;否则,输出读取文件中的好友的各项信息,并显示出来。
最后,关闭文件。
四、保存函数:
voidsave(haoyoustu[N],intn)
当录入好友信息,更改好友信息或者删除某个好友信息时,总之当好友信息反生改变时,调用这个函数利用文件的操作将其信息保存在文件当中。
五、输出函数:
voidoutput()
用for控制循环,依次将各个好友的各项信息输出。
六、删除函数:
voiddel()
输入一个好友姓名,先找到这个好友的信息。
如果输入的姓名在好友信息中,
如果不在就输出“没有找到该好友信息!
”,如果在就进行一下三个判断:
(1)如果要删除的好友是第一个好友,就让第二个好友的地址等于head;
(2)如果要删除的好友是最后一个好友,就让倒数第二个好友的覆盖最后一个;(3)如果输入的好友不是以上两种情况,就让下一个好友的地址覆盖前一个好友的。
七、修改函数:
voidchange()
输入要修改的好友姓名,找到该好友并且输出该好友的信息。
然后屏幕上会出现好友信息的所有项目。
选择后输入新的好友的各项信息信息,用它来覆盖原来的好友信息。
最后调用保存函数保存在文件。
八、查询函数:
voidsearch()
首先进入查询菜单,在这里可以选择按照姓名或者电话号码查询好友;输入需要查找的好友的姓名或电话,利用strcmp将所要查询信息与文件当中的信息比较,如果相同则输出;用for语句控制循环使每一个好友的信息与所查信息比较;如果要查询的好友的姓名或者电话在好友当中,就输出该好友信息,否则,就输出查询的好友信息不存在,请重新输入。
【源程序】
#include
#include
#include
#include"conio.h"
#defineN30
typedefstructhaoyou/*typedef是类型定义的意思。
typedefstruct是为了使用这个结构体方便。
区别就在于使用时,是否可以省去struct这个关键字*/
{
charname[20];
charsex[6];
intage;
charadress[50];
charQQ[15];
chartel[15];
}haoyou;
voidmenu();
intreads(haoyoustu[N]);//读取
voidsave(haoyoustu[N],intn);//保存
voidadd();//添加
voiddel();//删除
voidsearch();//查询
voidchange();//修改
voidoutput();//信息显示
voidmain()
{
intn;
while
(1)/*while
(1)其中1代表一个常量表达式,他永远不会等于0。
所以,循环会一直执行下去。
除非你设置break等类似的跳出循环语句循环才会中止*/
{
menu();
scanf("%d",&n);
switch(n)
{
case1:
add();break;
case2:
output();break;
case3:
del();break;
case4:
change();break;
case5:
search();break;
case0:
printf("欢迎下次使用\n");exit(0);//退出程序
default:
printf("\t\t***********************************\n");
printf("\t\t输入错误,请输入列表中存在的编号\n");
printf("\t\t***********************************\n");
}
printf("\t\t\t*************\n");
printf("\t\t\t按任意键返回\n");
printf("\t\t\t*************\n");
getch();/*getch();或ch=getch(); 用getch();会等待你按下任意键,再继续执行下面的语句; 用ch=getch();会等待你按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句。
*/
fflush(stdin);//用来清空输入缓存,以便不影响后面输入的东西
}
}
voidmenu()
{
system("color3f");//控制台颜色操作(前景加后景)
system("cls");/*运行前清屏*/
printf("\t\t*************好友信息管理系统************\n");/*菜单选择*/
printf("\t\t______________主菜单_______________\n");
printf("\t\t|1.键入好友信息|\n");
printf("\t\t|2.显示好友信息|\n");
printf("\t\t|3.删除好友信息|\n");
printf("\t\t|4.更改好友信息|\n");
printf("\t\t|5.查询好友信息|\n");
printf("\t\t|0.退出程序|\n");
printf("\t\t-----------------------------------------\n");
printf("\n");
printf("\t\t\t请输入您的选项(0-5):
\n");
}
intreads(haoyoustu[N])//读取好友文件中的内容
{
FILE*fp;
inti=0;
if((fp=fopen("d:
\\haoyou","r"))==NULL)
{
printf("文件打开失败!
\n");
return0;
}
else
{
for(i=0;!
feof(fp);i++)
fscanf(fp,"%s%s%s%s%s\n",stu[i].name,stu[i].sex,stu[i].adress,stu[i].QQ,stu[i].tel);
}
fclose(fp);
returni;
}
voidsave(haoyoustu[N],intn)//好友信息改变后更新文件
{
FILE*fp;
inti=0;
if((fp=fopen("d:
\\haoyou","w"))==NULL)
{
printf("文件打开失败!
\n");
return;
}
else
{
for(i=0;ifprintf(fp,"%s%s%s%s%s\n",stu[i].name,stu[i].sex,stu[i].adress,stu[i].QQ,stu[i].tel);
}
fclose(fp);
}
voidadd()/*添加好友信息*/
{
FILE*fp;
intn,i;
haoyoustu;
if((fp=fopen("d:
\\haoyou","a"))==NULL)//如果文件已经存在,可以追加好友信息
{
if((fp=fopen("d:
\\haoyou","w"))==NULL)//文件不存在时,创建新文件,输入好友信息
{
printf("文件打开失败!
\n");
return;
}
}
printf("**************************************\n");
printf("请输入要添加的好友数量,按回车键确认:
\n");
printf("**************************************\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("**************************************************************\n");
printf("请输入第%d个好友的姓名、性别、地址、QQ号和电话用空格分开,并按回车键确认:
\n",i);
printf("**************************************************************\n");
scanf("%s%s%s%s%s",stu.name,stu.sex,stu.adress,stu.QQ,stu.tel);
fprintf(fp,"%s%s%s%s%s\n",stu.name,stu.sex,stu.adress,stu.QQ,stu.tel);
}
fclose(fp);
}
voidoutput()//好友信息显示函数
{
haoyoustu[N];
inti,n;
intnum;
n=reads(stu);
printf("**********************所有的好友信息如下*******************\n\n");
printf("序号姓名性别地址QQ号电话\n");
printf("*************************************************************\n");
for(i=0;iprintf("%d|%-6s|%-6s|%-6s|%-6s|%-6s|\n",i+1,stu[i].name,stu[i].sex,stu[i].adress,stu[i].QQ,stu[i].tel);
printf("*************************************************************\n");
printf("\t\t\t--------------------------\n");//对检索的好友进行操作
printf("\t\t\t****1.删除该好友信息****\n");
printf("\t\t\t****2.修改该好友信息****\n");
printf("\t\t\t****3.退出本级菜单****\n");
printf("\t\t\t--------------------------\n");
printf("\t\t\t输入要进行的操作<1-3>\n");
scanf("%d",&num);
switch(num)
{
case1:
del();break;
case2:
change();break;
}
}
voiddel()/*好友信息删除函数*/
{
haoyoustu[N];
charming[20];
intn,i,j;
n=reads(stu);
printf("********************************************\n");
printf("请输入要删除信息的好友姓名,按回车键确认:
\n");
printf("********************************************\n");
scanf("%s",ming);
for(i=0;iif(strcmp(ming,stu[i].name)==0)break;
if(i>=n)
{
printf("没有找到该好友信息!
\n");
return;
}
else
{
for(j=i+1;jstu[j-1]=stu[j];
}
save(stu,n-1);
printf("删除成功!
\n");
}
voidchange()//好友信息更改
{
haoyoustu[N];
intn,i;
charming[20];
printf("******************************************\n");
printf("请输入要更改信息的好友姓名,按回车键确认:
\n");
printf("******************************************\n");
scanf("%s",ming);
n=reads(stu);
for(i=0;iif(strcmp(ming,stu[i].name)==0)
break;
if(i>=n)
{
printf("无此好友信息!
");
return;
}
printf("**************************************************************\n");
printf("请输入更改后好友的姓名、性别、地址、QQ号、电话,按回车键确认:
\n");
printf("**************************************************************\n");
scanf("%s%s%s%s%s",stu[i].name,stu[i].sex,stu[i].adress,stu[i].QQ,stu[i].tel);
save(stu,n);
}
voidname_search()//按姓名对好友信息查询
{
haoyoustu[N];
charnamed[20];
inti,n;
n=reads(stu);
printf("****************************************\n");
printf("请输入待查询的好友姓名,按回车键确认:
\n");
printf("****************************************\n");
scanf("%s",named);
for(i=0;iif(strcmp(named,stu[i].name)==0)break;
if(i>=n)
{
printf("没有找到该好友信息!
\n请重新输入\n");
return;
}
else
{
printf("*************************************************************\n");
printf("姓名性别地址QQ号电话\n");
printf("*************************************************************\n");
printf("\n%s%s%s%s%s\n",stu[i].name,stu[i].sex,stu[i].adress,stu[i].QQ,stu[i].tel);
printf("*************************************************************\n");
}
}
voidtel_search()//按电话对好友信息查询
{
haoyoustu[N];
charphone[20];
inti,n;
n=reads(stu);
printf("****************************************\n");
printf("请输入待查询的好友电话,按回车键确认:
\n");
printf("****************************************\n");
scanf("%s",phone);
for(i=0;iif(strcmp(phone,stu[i].tel)==0)break;
if(i>=n)
{
printf("没有找到该好友信息!
\n请重新输入\n");
return;
}
else
{
printf("*************************************************************\n");
printf("姓名性别地址QQ号电话\n");
printf("*************************************************************\n");
printf("\n%s%s%s%s%s\n",stu[i].name,stu[i].sex,stu[i].adress,stu[i].QQ,stu[i].tel);
printf("*************************************************************\n");
}
}
voidsearch()//按条件进行查询
{
intitem;
printf("\t\t\t**********************\n");
printf("\t\t\t****1.按姓名查询****\n");
printf("\t\t\t****2.按电话查询****\n");
printf("\t\t\t****3.退出本菜单****\n");
printf("\t\t\t**********************\n");
printf("请选择查询项目:
\n");
scanf("%d",&item);
switch(item)
{
case1:
name_search();break;