c课程设计报告试题库管理系统.docx
- 文档编号:28658090
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:26
- 大小:424.88KB
c课程设计报告试题库管理系统.docx
《c课程设计报告试题库管理系统.docx》由会员分享,可在线阅读,更多相关《c课程设计报告试题库管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
c课程设计报告试题库管理系统
课程设计报告
学院:
信息科学和工程学院
专业:
计算机科学和技术(软件外包)
班级:
计软1205
学号:
20121214150、20121214189、20121214168
学生姓名:
吴恒臻、赵晨、于永峥
指导教师:
范玉玲
课程名称:
程序设计基础
设计名称:
试题库管理系统
一、
设计内容及要求
设计题目管理信息包括:
题目编号、题目名称、题目内容、出题年份、选题学生、选题学生学号、选题学生电话等。
系统的主要功能包括:
1、创建和读取题目信息文件(吴恒臻)
判断指定位置是否有题库文件,如果没有则根据提示输入各项信息,然后将题目信息存储到一个文本文件中(setFile()),如果有则读取题目信息(readFile()),统计信息中题目个数(Count)。
2.调用主菜单(Menu()),并用switch语句通过读入select进行功能选择。
3、查询题目信息(赵晨)
根据输入查询选项进行查询题库中题目信息
按不同条件对题目信息进行查询操作,输出满足条件的题目信息。
(1)按题目编号查询。
(2)按题目名称查询。
(3)按出题年份查询。
look函数(分为编号、年份、题目名称三种形式)是查找信息函数,以do—while进行循环,利用结构体以数组的形式显示信息,分别是按题目编号,按题目名称,按出题年份查询,每一个项目里有包含一个do—while循环。
4、增加题目信息(赵晨)
在原有题目信息文件的基础上增加新的题目信息,要求继续保存至原文件,并提示用户选择是否继续进行增加操作。
Add是增加信息函数,以do—while来进行循环增加要增加的信息
5、删除题目信息(于永峥)
提示用户输入要进行删除操作的题目编号,如果在文件中有该信息存在,则将该题目编号所对应的题目信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。
dele是删除信息函数,利用do——while循环里面包含着条件成立后要删除的信息
6、修改题目信息(于永峥)
提示用户输入要进行修改操作的题目编号,如果在文件中有该信息存在,则将提示用户输入该编号对应的题目内容和学生信息,结果保存至原文件,并提示用户选择是否继续进行修改操作。
Correct函数是修改信息的函数,依旧是用do—while循环
二、设计思路
此程序由一个主函数和七个自定义函数组成。
调用Menu函数(吴恒臻)通过printf输出主菜单。
Setfile函数(吴恒臻)是创建函数,定义文件指针变量以读写形式创建一个文件,根据提示录入信息.。
look函数(分为编号、年份、题目名称三种形式——赵晨)是查找信息函数,以do—while进行循环,以数组的形式显示信息,分别是按题目编号,按题目名称,按出题年份查询,每一个项目里有包含一个do—while循环。
Add函数(赵晨)是增加信息函数,以do—while来进行循环增加要增加的信息.dele函数(于永峥)是删除信息函数,利用do——while循环里面包含着条件成立后要删除的信息。
Correct函数(于永峥)是修改信息的函数,依旧是用do—while循环。
每一个函数都用了goto语句和调用了writefile文件函数。
Main函数(吴恒臻)中用了switch语句来选择要调用的函数。
三、设计结果及分析
程序可以运行,不存在明显问题。
在主菜单中可以选择1-5来实现功能的选择。
然后根据提示输入信息。
之后查询,修改,增加,删除,都可正常运行。
输入乱码后会自动跳转到主菜单。
1、如果无题库信息,则建立题库,如图所示:
(如果有信息,则直接跳至主菜单。
如图3)
2、建立如图所示的信息,编号为1.
3、建立完信息来到主菜单,如图所示,进行功能选择。
4、查询题目信息:
按照编号查询结果如下图所示:
同理,按照题目名称查询和年份查询运行结果如下:
5、添加题目信息
在主菜单中选择添加题目信息,程序运行如图所示:
系统提示是否继续添加。
(至此,文件中已有已添加的题目信息)
6、删除题库中题目信息
在主菜单中选择删除信息选项,进行题目信息的删除,程序运行结果如图所示:
7、修改题库中题目信息
在主菜单中选择修改功能,进行题目信息的修改,程序运行结果如图所示:
8、最后是系统的退出,如图所示:
四、总结
通过此次的程序设计课学到了很多,对C语言也有了更好的了解,同时也对C程序的操作和调试也有了进一步的掌握。
从中了解到了C语言是国内外广泛使用的语言,而且还知道了它的功能丰富、表达能力强、使用灵活方便、使用面广、目标程序效率高等特点。
特别的适合于编写系统软件。
总之经过了几天的奋斗我们都掌握了很多知识,收获了很多。
期间,虽然我们小组遇到了一些问题,在刚刚编完时,出现了许多错误,其中最主要的便是查找函数的问题,出现了查找到函数但是显示未查找到的问题,经过几次改写、查找资料和向老师请教,最终将这个问题解决了。
同时,在编写过程中还出现了一些因马虎而产生的小错误,不过最后经过仔细检查都解决了。
还有,在编写添加函数时出现了一些问题和BUG,但经过参考一些资料和老师的辅导后,找出了问题所在。
在编写这个系统的过程中我们体会到了团队合作得重要性,没有我们组各个成员的分工合作、集体商议和老师的指导,一个人是很难完成设计的,而且在开始的时候遇到了很多问题没法解决,摆好时间没有进展,当我认为是设计思路错误,想要放弃重来时,也是队友及朋友的鼓劲支持,才得以见到柳暗花明的一刻。
一个星期很快就过去了,程序设计课也接近尾声了,通过请教别人,在发现问题然后解决问题的过程中体会到了不一样的快乐!
虽然有时会为了一个小小的BUG苦恼不已,但当解决后却是异常的兴奋!
现在回想来看这个程序觉得不是很复杂,但我们却不能很顺利的完成,因此我们还要好好的学习,努力奋斗!
五、附录(源代码)
#include
#include
#include
#defineN20//N限定各信息字符串占用的长度
#defineM2000//M限定题库存储题目数量
typedefstructtimu
{
intbh;//定义题目编号
intnf;//定义题目年份
charmc[20];//定义题目名称
charnr[200];//定义题目内容
charxsxh[20];//定义学生学号
charxsxm[20];//定义学生姓名
charxsdh[20];//定义学生电话
}TIMU;
TIMUtm[M];
intCount=0;//用来统计储存的题目个数
voidMenu(void);//显示主菜单函数
voidset(void);//创建文件函数
voidadd(void);//增加信息函数
voiddele(void);//删除信息函数
voidcorrect(void);//修改信息函数
voidLook(void);//查找信息函数
voidwriteFile();//储存数据到文件的函数
//=================================================//
//功能:
创建题库信息文件,根据提示输入题库的各项信息,将题库信息存储到一个二进制文件中.
//主要思路:
定义文件指针变量以读写形式创建一个文件,根据提示录入信息.
//================================================//
voidsetFile()
{
FILE*fp;
fp=fopen("c:
\\timu.txt","w");
if(fp==NULL)
{
printf("Can'topenfile!
\n");
return;
}
printf("请根据提示开始建立文件的第一条信息!
\n");
do
{
printf("编号:
");
scanf("%d",&tm[0].bh);
}while(tm[0].bh<0);
do
{
printf("年份:
");
scanf("%d",&tm[0].nf);
}
while(tm[0].nf<1980||tm[0].nf>2013);
printf("题目名称:
");
scanf("%s",tm[0].mc);
printf("题目内容:
");
scanf("%s",tm[0].nr);
printf("选题学生学号:
");
scanf("%s",tm[0].xsxh);
printf("选题学生姓名:
");
scanf("%s",tm[0].xsxm);
printf("选题学生电话:
");
scanf("%s",tm[0].xsdh);
fflush(stdin);
fprintf(fp,"%d%d%s%s%s%s%s\n",tm[0].bh,tm[0].nf,tm[0].mc,tm[0].nr,tm[0].xsxh,tm[0].xsdh,tm[0].xsxm);
fclose(fp);
Count=1;
system("cls");
}
//================================================//
//读取题库信息函数//
//================================================//
voidreadFile()
{
FILE*fp;
inti;
fp=fopen("c:
\\timu.txt","r");
if(fp==NULL)
{
printf("cannotopenreadfile\n");
return;
}
i=0;
while(!
feof(fp))
{
fscanf(fp,"%d%d%s%s%s%s%s\n",&tm[i].bh,&tm[i].nf,tm[i].mc,tm[i].nr,tm[i].xsxh,tm[i].xsdh,tm[i].xsxm);
i++;
}
fclose(fp);
Count=i;
}
//=====================================================//
//功能:
显示系统菜单
//参数:
无
//返回值:
无
//主要思路:
利用printf函数输出菜单
//====================================================//
voidMenu(void)
{
printf("\n");
printf("\t-----------------------------------------\n");
printf("\t**\n");
printf("\t*题目管理系统*\n");
printf("\t**\n");
printf("\t*编写人:
吴恒臻、赵晨、于永峥*\n");
printf("\t*班 级:
计软1205*\n");
printf("\t**\n");
printf("\t-----------------------------------------\n");
printf("\n");
printf("\t请输入您要进行的操作:
\n\n");
printf("\t1.查询题目信息文件\n");
printf("\t2.增加题目信息\n");
printf("\t3.删除题目信息\n");
printf("\t4.修改题目信息\n");
printf("\t5.退出系统\n\n");
printf("\t请选择按键(1-5):
");
}
intmain(void)
{
intselect;
FILE*fp;
fp=fopen("c:
\\timu.txt","r");
if(fp==NULL)
setFile();
else
{fclose(fp);readFile();}
while
(1)
{
Menu();//调用Menu函数显示主菜单
scanf("%d",&select);//输入想选择的功能
fflush(stdin);//清空缓存
switch(select)//对select进行多分支选择
{
case1:
system("cls");Look();break;
case2:
system("cls");add();break;
case3:
system("cls");dele();break;
case4:
system("cls");correct();break;
case5:
system("cls");printf("\n\t谢谢使用,再见!
\n");exit(0);
default:
system("cls");printf("\n\t按键有误,请重新选择!
\n");
}
}
return0;
}
//===========================================//
//功能:
查找信息
//主要思路:
利用循环及数组显示信息
//===========================================//
voidLook(void)
{
intj,find,z,i,f;//find为查询方式的数字,j,z,i,f用于循环
charch[10];//接受y/n和回车
charmc[20];//储存输入要查询的名称
FILE*fp;
if((fp=fopen("c:
\\timu.txt","r"))==NULL)
{
printf("Can'topenfile!
\n");
return;
}
if(Count==0)
{
printf("库中没有题目,无法查询!
\n");
return;
}
printf("请选择查询方式\n1.按照编号查询\n2.按照题目名称查询\n3.按编题年份查询\n请输入:
\n");
scanf("%d",&find);
fflush(stdin);
if(find==1)
{
do
{
printf("\n请输入编号进行查询:
");
scanf("%d",&j);
for(i=0;i { if(tm[i].bh==j)//找到相配匹的编号 { printf("题目编号: %d\n编题年份: %d\n题目名称: %s\n题目内容: %s\n选题学生学号: %s\n选题学生姓名: %s\n选题学生电话: %s\n",tm[i].bh,tm[i].nf,tm[i].mc,tm[i].nr,tm[i].xsxh,tm[i].xsxm,tm[i].xsdh); break; } } if(i==Count) printf("没查到该编号的题目! \n"); printf("是否继续查询? (y/n): "); scanf("%s",ch); }while(strcmp(ch,"y")==0);//用来重复查询 } if(find==2) { do { z=0; printf("\n请输入题目名称进行查询: "); scanf("%s",mc); for(i=0;i { if(strcmp(tm[i].mc,mc)==0)//找到想匹配的题目名称 { z=1; printf("题目编号: %d\n编题年份: %d\n题目名称: %s\n题目内容: %s\n选题学生学号: %s\n选题学生姓名: %s\n选题学生电话: %s\n\n",tm[i].bh,tm[i].nf,tm[i].mc,tm[i].nr,tm[i].xsxh,tm[i].xsxm,tm[i].xsdh); //break; } } if(z==0) printf("没查到该名称的题目! \n"); printf("是否继续查询? (y/n): "); scanf("%s",ch); }while(strcmp(ch,"y")==0); } if(find==3) { do { z=0; printf("\n请输入出题年份"); scanf("%d",&f); for(i=0;i { if(tm[i].nf==f)//找到想匹配的出题年份 { z=1; printf("题目编号: %d\n编题年份: %d\n题目名称: %s\n题目内容: %s\n选题学生学号: %s\n选题学生姓名: %s\n选题学生电话: %s\n\n",tm[i].bh,tm[i].nf,tm[i].mc,tm[i].nr,tm[i].xsxh,tm[i].xsxm,tm[i].xsdh); } } if(z==0) printf("没查到该年份的题目! \n"); printf("是否继续查询? (y/n): "); scanf("%s",ch); }while(strcmp(ch,"y")==0); } system("cls"); fclose(fp); } //================================================// //每次添加、删除、修改时所需要调用的写入文件函数// //================================================// voidwriteFile() { FILE*fp; inti; fp=fopen("c: \\timu.txt","w"); if(fp==NULL) { printf("Can'topenfileforwrite! \n"); return; } for(i=0;i fprintf(fp,"%d%d%s%s%s%s%s\n",tm[i].bh,tm[i].nf,tm[i].mc,tm[i].nr,tm[i].xsxh,tm[i].xsdh,tm[i].xsxm); fclose(fp); } //=================================// //功能: 增加信息 //主要思路: 利用do,while循环 //=================================// voidadd(void) { charch[2]; intj,i,flag; do { b1: ; b2: ; i=Count; do { printf("编号: "); scanf("%d",&tm[i].bh); flag=0; for(j=0;j if(tm[j].bh==tm[i].bh) { flag=1; break; } }while(flag==1); do { printf("年份: "); scanf("%d",&tm[i].nf); }while(tm[i].nf<1980||tm[i].nf>2013); printf("题目名称: "); scanf("%s",tm[i].mc); printf("题目内容: "); scanf("%s",tm[i].nr); printf("选题学生学号: "); scanf("%s",tm[i].xsxh); printf("选题学生姓名: "); scanf("%s",tm[i].xsxm); printf("选题学生电话: "); scanf("%s",tm[i].xsdh); Count++; printf("题库中已经包含%d个题目的信息! \n",Count); printf("是否继续添加? (y/n): "); scanf("%s",ch); }while(strcmp(ch,"y")==0); system("cls"); writeFile(); } //================================// //功能: 删除信息 //主要思路: 利用循环. //================================// voiddele(void) { intj,i; charch[2]; do { printf("请输入编号进行删除: "); scanf("%d",&j); for(i=0;i if(tm[i].bh==j) break; if(i==Count) { printf("没有找到编号为%d的题目! ",j); gotodel; } printf("题目编号: %d\n编题年份: %d\n题目名称: %s\n题目内容: %s\n选题学生学号: %s\n选题学生姓名: %s\n选题学生电话: %s\n\n",tm[i].bh,tm[i].nf,tm[i].mc,tm[i].nr,tm[i].xsxh,tm[i].xsxm,tm[i].xsdh); printf("是否真的要删除该题? (y/n)"); scanf("%s",ch); if(strcmp(ch,"y")! =0) gotodel; for(j=i+1;j tm[j-1]=tm[j]; Count-=1; writeFile(); printf("题目已删除成功! \n"); del: printf("是否要继续删除其它题目? (y/n)"); scanf("%s",ch); }while(strcmp(ch,"y")==0); system("cls"); } //======================================// //功能: 修改信息 //主要思路: 利用循环和数组重新输入信息 //======================================// voidcorrect(void) { intj,i; charch[2]; do {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 试题库 管理 系统