c语言课程设计.docx
- 文档编号:23273522
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:23
- 大小:66.90KB
c语言课程设计.docx
《c语言课程设计.docx》由会员分享,可在线阅读,更多相关《c语言课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
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;j records[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〕、设计小结: 此次的设计是我第一次独立的设计一个程序,同时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计