c语言课程设计.docx
《c语言课程设计.docx》由会员分享,可在线阅读,更多相关《c语言课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
![c语言课程设计.docx](https://file1.bdocx.com/fileroot1/2023-5/15/781810f5-9597-4bc9-9f87-4fdf7e894833/781810f5-9597-4bc9-9f87-4fdf7e8948331.gif)
c语言课程设计
c语言课程设计
1、目的:
1〕对C各部分知识的综合应用能力
2〕提高程序设计的能力
3〕提升关于较大程序的抽象分析设计能力
4〕学习调试和测试的技巧
2、所做题目的意义:
通讯录治理系统在当今那个信息发达的社会是必不可少的,那个通讯录治理系统能够方便的为我们添加、治理联系人,不必一定要记住这些庞大的信息,能够专门方便的调用出自己所需要的信息,随时的修改这些信息,这些在那个时代是专门的必要的。
3、本人所作的工作:
〔1〕、写出了预习报告。
从图书馆搜集了些这方面的资料
〔2〕、想好思路,写出了程序代码
〔3〕、调试程序,找出其中的错误,最终成功的运行出程序
〔4〕、写出课程设计报告
4、系统的要紧功能:
该系统的是一个小型的通讯系统,它具有一样的通讯系统都具有的功能该程序具有查找、添加、修改、删除功能,其中通讯录包括:
姓名,,街道,都市,省,。
5.、系统的总体设计:
系统的差不多要求和内容:
该系统要求具有查找,添加,修改,删除功能,其中通讯录包括:
姓名、,街道,都市,省,。
但在实际设计中增加了一项,那确实是末尾添加,能够在已有的记录末尾再次添加,不必每次都重新添加,方便用户
描画及绘制出系统的功能结构框图、程序设计组成框图,流程图等:
此系统共分为九大模块,分别为以下的模块:
第一模块:
主函数main()的功能是:
依照选单的选项调用各函数,并完成相应的功能。
第二模块:
quitRec()的功能是:
退出选单。
第三模块:
createRec()的功能是:
创建新的通讯录。
第四模块:
addRec()的功能是:
在通讯录的末尾写入新的信息,并返回选单。
第五模块:
findRec()的功能是:
查询某人的信息,假如找到了,那么显示该人的信息,假如未找到,那么提示通讯录中没有此人的信息,并返回选单。
第六模块:
alterRec()的功能是:
修改某人的信息,假如未找到要修改的人,那么提示通讯录中没有此人的信息,并返回。
第七模块:
deleteRec()的功能是:
删除某人的信息,假如未找到要删除的人,那么提示通讯录中没有此人的信息,并返回选单。
第八模块:
listRec()的功能是显示通讯录中的所有记录。
第九模块:
saveRec()的功能是储存某人的信息在某一文件夹里。
以上九大模块为此通信系统的就大差不多模块,用此模块设计能够清晰说明通信治理系统程序的功能、格局,能够用以下组成框图来表示:
〔1〕.系统结构图〔功能模块图〕和数据变量说明
主菜单
主函数输入
创建信息
末尾写入
查询信息
修改信息
删除信息
显示记录
储存信息
退出系统
〔2〕功能模块说明:
〔1〕、主函数输入模块
开始
输入i
i=1
i=2
i=3
查询通讯录
创建通讯录
添加通讯录
i=4
i=5
I=6
输入错误
删除通讯录
退出通讯录
修改通讯录
〔2〕quitRec函数模块〔3〕createRec函数模块
开始
储存记录吗
储存
返回主函数
返回主函数
清屏
输入
返回主程序
开始
〔4〕addRec函数模块〔5〕findRec函数模型
开始
输入想在哪个数列后面加
i=-1
返回主函数
输入新数据
储存
返回主函数
开始
输入姓名
Str=records[j].name
未找到该联系人
显示数据
返回主函数
〔7〕、deleteRec函数模型
开始
输入名字
删除数据
返回主函数
〔6〕、alterRec函数模型
开始
输入数列
显示数据
输入数据
返回主函数
〔8〕、listRec函数模型〔9〕、saveRec函数模型
开始
打开文件
写入数据
退出主函数
开始
输入序列号
输出数据
返回主函数
〔3〕、详细设计
模块功能说明:
第一模块:
主函数main()的功能是:
依照选单的选项调用各函数,并完成相应的功能。
第二模块:
quitRec()的功能是:
退出选单。
第三模块:
createRec()的功能是:
创建新的通讯录。
第四模块:
addRec()的功能是:
在通讯录的末尾写入新的信息,并返回选单。
第五模块:
findRec()的功能是:
查询某人的信息,假如找到了,那么显示该人的信息,假如未找到,那么提示通讯录中没有此人的信息,并返回选单。
第六模块:
alterRec()的功能是:
修改某人的信息,假如未找到要修改的人,那么提示通讯录中没有此人的信息,并返回。
第七模块:
deleteRec()的功能是:
删除某人的信息,假如未找到要删除的人,那么提示通讯录中没有此人的信息,并返回选单。
第八模块:
listRec()的功能是显示通讯录中的所有记录。
第九模块:
saveRec()的功能是储存某人的信息在某一文件夹里。
在所有的函数中,main()函数数入口函数,用户输入数据进行整个程序的执行,整个函数的出口是qiut()函数,每一个函数执行完毕后都要退到主函数中,差不多每个输入、改动或者是删除的函数都要调用储存函数,而主函数调动所有的函数。
〔4〕、调试与测试:
在此次的课程设计中,做困难的一部分便是调试与测试这部分了,在此次调试中最开始是符号标点的问题,有许多都没注意,最终依旧慢慢的把这些错误调试出来了;
还有一种错误便是库函数的问题,在此次调试中,发觉有许多别的软件里的库函数在此软件中不能用,最终依旧通过再次编写被调用函数来实现了预期的功能;
此外,在函数的调试中,还发觉一种问题,在所绘的表格中,无法对齐表格,通过调试,移动表格的位置来实现了表格的工整;
还有,在测试中,发觉原本应该在两个页面的数据在同一个页面中显示出来了,通过分析,认为这是由于没有清屏的结果,加上清屏后,问题终于解决了。
〔5〕、运行结果:
1、主菜单:
2、创建新数据:
第一输入创建的序号〝2〞,会进入以下那个界面:
输入数据后然后会依次显现下面的条目:
,
最后返回到先前的主菜单
3、查找数据:
按了〝1〞以后,会显现以下菜单:
会提示你输入要查找的姓名
输入姓名后会显现以下的显示
退出到主菜单;
4、在末尾添加数据,按了〝3〞之后,会显现以下:
输入想要添加的数列,会显现下面输入数据的界面:
按任意键退出后,回到主菜单。
5、修改数据:
输入〝4〞之后,会显现以下界面
输入位置后,按以下流程输入数据
输入Y之后,再将新的数据输入就行了
6、删除数据:
按下〝5”后,会显现那个显示
输入姓名后,会删除数据并储存已存的结果。
7、退出数据,按下〝6〞以后会退出,并提示是否储存数据
8、载入数据:
按下〝7〞后那个能够载入往常储存的数据,
9.储存数据:
按下〝8”后,能够储存数据以备下次再用
〔6〕源程序
#include
#include
#include
#include
#include
#include
#include
voidshowTable1();
voidshowTable2(int);
voidfindRec();
voidcreateRec();
voidaddRec();
voidsaveRec();
voidalterRec();
voiddeleteRec();
voidquit();
voidLoadRec();
voidlistRec();
intsearch(char*,int,int);
voidgotoxy(intx,inty)
{
CONSOLE_SCREEN_BUFFER_INFOcsbiInfo;
HANDLEhConsoleOut;
hConsoleOut=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
csbiInfo.dwCursorPosition.X=x;
csbiInfo.dwCursorPosition.Y=y;
SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);
}
char*mulu[]={"*************通讯治理系统**************",
"│1.查找│",
"│2.创建│",
"│3.添加│",
"│4.修改│",
"│5.删除│",
"│6.退出│",
"│7.载入│",
"│8.储存│",
"└──────────────────┘"
};
typedefstructsl
{
charno[20];
charname[10];
charscore[10];
charstreet[10];
charcity[10];
charprovince[10];
charpostcode[10];
}TONGXUN;
intmuluxuanze();
intJILUSHU=0;
TONGXUNrecords[1000];
voidmain()
{
system("cls");
gotoxy(2,20);
for(;;)
switch(muluxuanze())
{
case1:
findRec();break;/*查询通讯录*/
case2:
createRec();break;/*创建通讯录*/
case3:
addRec();break;/*添加通讯录*/
case4:
alterRec();break;/*修改通讯录*/
case5:
deleteRec();break;/*删除通讯录*/
case6:
quit();/*退出通讯录*/
case7:
LoadRec();break;/*载入通讯录*/
case8:
saveRec();break;/*储存通讯录*/
}
}
intmuluxuanze()
{
inti;
for(i=0;i<10;i++)
{
gotoxy(10,i+1);
cprintf("%s",mulu[i]);
}
printf("\n");
printf("请输入要做的选项数字(1-8):
");
scanf("%d",&i);
return(i);
}
voidshowTable1()/*表头一*/
{
system("cls");
gotoxy(10,2);
printf("***************************具体数据*******************************");
gotoxy(1,3);
printf("┌────┬────┬────┬────┬─────┬─────┬─────┐\n");
gotoxy(1,4);
printf("│数目│姓名││街道│都市│省││\n");
gotoxy(1,5);
printf("├────├────├────├────├─────├─────│─────│\n");
}
voidshowTable2(intn)/*表头二*/
{
if(n==0)n=1;
if(JILUSHU==0)n=-1;
gotoxy(1,6+n);
printf("└─────────────────────────────────────┘\n");
}
voidquit()/*退出*/
{
charstr[5];
gotoxy(22,18);
printf("储存记录吗?
(Y/N)");
scanf("%s",str);
if(str[0]=='Y'||str[0]=='y')
saveRec();
exit(0);
}
voidcreateRec()/*创建通讯录*/
{
inti,sum;
system("cls");
printf("请输入要添加的通讯记录数目:
");
scanf("%d",&JILUSHU);
for(i=0;i{
system("cls");
sum=0;
gotoxy(20,5);printf("Pleaseinput%dnumber",i+1);
gotoxy(20,6);printf("输入序号:
");scanf("%10s",records[i].no);
gotoxy(20,7);printf("输入姓名:
");scanf("%10s",records[i].name);
gotoxy(20,8);printf("输入:
");scanf("%10s",records[i].score);
gotoxy(20,9);printf("输入街道:
");scanf("%10s",records[i].street);
gotoxy(20,10);printf("输入都市:
");scanf("%10s",records[i].city);
gotoxy(20,11);printf("输入省:
");scanf("%10s",records[i].province);
gotoxy(20,12);printf("输入:
");scanf("%10s",records[i].postcode);
}
printf("请按任意键返回!
");
getch();
system("cls");
}
voidlistRec()/*显示所有通讯录*/
{
inti=0;
showTable1();
printf("输入所查数据的序号:
");
scanf("%d",&JILUSHU);
for(i=0;i{
gotoxy(1,6+i);
printf("%10s%10s%10s%10s%10s%10s%10s\n",records[i].no,records[i].name,records[i].score,records[i].street,records[i].city,records[i].province,records[i].postcode);
}
showTable2(i);
printf("请按任意键返回!
");
getch();
}
voidsaveRec()/*储存通讯记录*/
{
FILE*fp1,*fp2;
if((fp1=fopen("e:
\\c\\c.txt","wb"))==NULL)
{
printf("不能打开那个文件");
exit
(1);
}
if((fp2=fopen("e:
\\c\\c1.txt","wb"))==NULL)
{
printf("不能打开那个文件");
exit
(1);
}
printf("\n储存文件\n");
fwrite(&JILUSHU,sizeof(JILUSHU),1,fp1);
fwrite(records,sizeof(records),JILUSHU,fp2);
fclose(fp1);fclose(fp2);
printf("\n文件储存成功!
!
\n");Sleep(1000);
printf("\n请按任意键退出\n");
getch();
system("cls");
}
voidLoadRec()/*载入通讯记录*/
{
FILE*fp1,*fp2;
if((fp1=fopen("e:
\\c\\c.txt","rb"))==NULL)
{
printf("不能打开那个文件");
exit
(1);
}
if((fp2=fopen("e:
\\c\\c1.txt","rb"))==NULL)
{
printf("不能打开那个文件");
exit
(1);
}
printf("\n载入文件\n");
fread(&JILUSHU,sizeof(JILUSHU),1,fp1);
fread(records,sizeof(records),JILUSHU,fp2);
fclose(fp1);fclose(fp2);
printf("\n文件载入成功!
!
\n");Sleep(1000);
printf("\n请按任意键退出\n");
getch();
system("cls");
}
voidfindRec()/*查询通讯记录*/
{
charstr[20];
inti,j;
system("cls");
printf("请输入您要找的人的姓名:
");
scanf("%s",str);
for(j=0,i=0;j{
if(strcmp(str,records[j].name)==0)
{
showTable1();
printf("%10s%10s%10s%10s%10s%10s%10s\n",records[i].no,records[j].name,records[j].score,records[j].street,records[j].city,records[j].province,records[j].postcode);
printf("\n");
showTable2(i);
break;
}
elseprintf("未找到该联系人");
}
printf("Pressanykeytoreturn!
");
getch();
system("cls");
}
voiddeleteRec()/*删除通讯记录*/
{
inti,j;
charstr[20];
system("cls");
printf("请输入您想删除的人的姓名:
");
scanf("%s",str);
for(i=0;i{
if(strcmp(str,records[i].name)==0)
{
for(j=i;jrecords[j]=records[j+1];
}
elseprintf("没有找到该联系人");
JILUSHU--;
saveRec();
}
system("cls");
}
intsearch(char*target,inttarType,intfrom)
{
inti;
for(i=from;i{
if((tarType==1&&strcmp(target,records[i].no)==0)||tarType==2&&strcmp(target,records[i].no)==0)
return(i);
}
return(-1);
}
voidalterRec()/*修改通讯录*/
{
inti,j;
charno[20],str[8];
system("cls");
printf("请输入你想要修改的数据位置数:
");
scanf("%d",no);
i=search(no,1,0);
showTable1();
printf("\n");
printf("%10s%10S%10s%10s%10s%10s%10s",records[i].no,records[i].name,records[i].score,records[i].street,records[i].city,records[i].province,records[i].postcode);
printf("└─────────────────────────────────────┘\n");
gotoxy(10,10);
printf("你想要修改这些数据吗(Y/N):
");
scanf("%s",str);
if(str[0]=='y'||str[0]=='Y')
{
system("cls");
printf("输入序号:
");scanf("%10s",records[i].no);
printf("输入姓名:
");scanf("%10s",records[i].name);
printf("输入:
");scanf("%10s",records[i].score);
printf("输入街道:
");scanf("%10s",records[i].street);
printf("输入都市:
");scanf("%10s",records[i].city);
printf("输入省:
");scanf("%10s",records[i].province);
printf("输入:
");scanf("%10s",records[i].postcode);
}
saveRec();
printf("请按任意键返回!
");
getch();
system("cls");
}
voidaddRec()/*在通讯录的末尾加上新的信息*/
{
inti,sum=0;
charstr[8];
for(;;)
{
system("cls");
printf("请输入您想要增加的序列:
");
scanf("%s",str);
i=search(str,1,0);
if(i==-1)break;
elseprintf("那个数据是错误的!
");
getch();
}
strcpy(records[JILUSHU].no,str);
printf("输入序号:
");scanf("%10s",records[i].no);
printf("输入姓名:
");scanf("%10s",records[i].name);
printf("输入:
");scanf("%10s",records[i].score);
printf("输入街道:
");scanf("%10s",records[i].street);
printf("输入都市:
");scanf("%10s",records[i].city);
printf("输入省:
");scanf("%10s",records[i].province);
printf("输入:
");scanf("%10s",records[i].postcode);
JILUSHU++;
saveRec();
}
〔7〕、使用说明:
此程序的运行环境并无太大的要求,一样的电脑都能运行;
使用方法:
进入了主菜单后,只需按照每个功能所对应的数字按下就能操作。
〔8〕、设计小结:
此次的设计是我第一次独立的设计一个程序,同时