C语言程序设计 题库管理系统.docx
《C语言程序设计 题库管理系统.docx》由会员分享,可在线阅读,更多相关《C语言程序设计 题库管理系统.docx(24页珍藏版)》请在冰豆网上搜索。
C语言程序设计题库管理系统
程序设计基础课程设计报告
班级:
计算机科学与技术1103班
**************
****************
完成日期:
2012年9月6日
(题目)
1.设计题目与要求
(简要介绍课程设计题目内容与要求。
)
1设计内容
要求输入试题(仅限选择题和填空题)基本信息,实现试题浏览.,查询,修改功能,并将数据保存至文本文件。
2要求
功能完善,界面友好。
2.算法设计与描述(要求有相关流程图)
2.1算法设计与描述
(描述算法设计、实现过程。
)
1.提供可操作的主菜单:
输出主菜单,用户可根据菜单来选择操作。
根据客户输入的选项来运行不同的功能,运行不同的函数。
2.。
试题信息的录入函数:
按照提示输入题的题号,题目内容,并提示用户是否继续录入,每输入一个记录,全局变量n就自增,最后最为函数的返回值返回。
3.保存试题信息函数:
将文件的所有数据通过fprintf来写入指定文本文档,完成后关闭文件,没有返回值
4.载入试题信息函数:
通过fopen函数打开指定文件,通过fscanf来读取文件里的数据,最后返回记录数,避免了每次打开时都要输入数据的麻烦。
5.查询记录函数:
细分为按题号,题目两种方式来进行查询记录,并能对查询记录不存在进行提示。
遍历所有结构体找出符合的输出。
6.修改记录函数:
首先判断用户要修改的试题序号是否存在,进行相应的系统提示,然后遍历所有记录找出符合的,按照提示依次进行修改项目,返回记录值不变(没增加也没减少)。
7.删除记录函数:
首先判断用户要删除的试题序号是否存在,进行相应的系统提示,然后遍历所有记录找出符合的删除,冰讲后面的所有数据向前移动一个位置,记录数减一并返回。
2.2主要流程图
(用N—S图描述。
)
1,、输入函数
2、保存函数
3、载入函数
4、查询函数
5、修改函数
6、删除函数
3.设计软硬件环境
硬件设备系统:
MicrosoftWindowsXPProfessional版本2002
机型:
Inter®Core™2DuoCPUE8400@3.00GHz2.99GHz,2.00GB内存
软件设备MicrosoftVisualC++6.0应用程序调试
4.源程序代码清单
#include
#include
#include
typedefstruct
{
chartihao[10];//题号
chartimu[15];//题目
}Data;
Datada[80];
intmenu_select()
{
charc;
do{
system("cls");
printf("\t\t\t========题库管理系统========\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│4.题目信息查询│\n");
printf("\t\t\t│5.题目文件操作│\n");//包括保存,读取和复制
printf("\t\t\t│0.退出管理系统│\n");
printf("\t\t\t└───────────┘\n");
printf("\t\t\t============================\n");
printf("\n\t\t请您选择(0-5):
");
c=getchar();
}while(c<'0'||c>'5');
return(c-'0');
}
voidtihaosort(Datadat[],intn)//题号排序
{
inti,j;
Datatemp;
for(i=0;ida[i]=dat[i];
for(i=0;ifor(j=i+1;jif(strcmp(da[i].tihao,da[j].tihao)>0)
{
temp=da[i];da[i]=da[j];da[j]=temp;
}
printf("\t\t========排序成功========\n");
}
voidSaveText(Datadat[],intn)//保存函数
{
inti;
FILE*fp;/*指向文件的指针*/
if((fp=fopen("txl.txt","wb"))==NULL)/*打开文件,并判断打开是否正常*/
{
printf("\t不能打开文件\n");/*没打开*/
exit
(1);/*退出*/
}
fprintf(fp,"%d",n);/*将记录数写入文件*/
fprintf(fp,"\r\n");
for(i=0;i{
fprintf(fp,"%-8s%-6s",dat[i].tihao,dat[i].timu);
fprintf(fp,"\r\n");/*将换行符号写入文件*/
}
fclose(fp);
}
intLoadText(Datadat[])//载入函数
{
inti,n;
FILE*fp;
if((fp=fopen("txl.txt","r"))==NULL)
{
printf("不能打开文件\n");
exit
(1);
}
fscanf(fp,"%d",&n);/*读入记录数*/
for(i=0;ifscanf(fp,"%s%s\n",dat[i].tihao,dat[i].timu);/*按格式读入记录*/
fclose(fp);
returnn;/*返回记录数*/
}
intCharu(Datadat[],intn)//插入函数
{
Datatemp;/*新插入记录信息*/
inti=0,j,k;
chars[20];
do
{
printf("\t请插入您的数据\n");
printf("\t题号:
");
scanf("\t%s",temp.tihao);
for(k=0;k{
if(strcmp(dat[k].tihao,temp.tihao)==0)
{
printf("\t-------该记录已存在,请重新输入!
-------\n");
system("pause");
system("cls");
break;
}
}
}while(strcmp(dat[k].tihao,temp.tihao)==0);
printf("\t题目:
");
scanf("\t%s",temp.timu);
printf("\t请输入插入位置的题号:
");
scanf("\t%s",s);/*输入插入位置的题号*/
while(strcmp(dat[i].tihao,s)!
=0&&iif(i==n)
{
printf("\t------------题库中没有记录,请查询后再操作!
-------------\n");
returnn;
}
for(i=0;strcmp(dat[i].tihao,s)!
=0;i++);
printf("\n\t\t***********插入成功!
************\n");
for(j=n-1;j>=i;j--)/*从最后一个结点开始向后移动一条*/
{
strcpy(dat[j+1].tihao,dat[j].tihao);/*当前记录的题号拷贝到后一条*/
strcpy(dat[j+1].timu,dat[j].timu);
}
strcpy(dat[i].tihao,temp.tihao);/*将新插入记录的题号拷贝到第i个位置*/
strcpy(dat[i].timu,temp.timu);
n++;/*记录数加1*/
returnn;
}
intShuru(Datadat[],intn)//输入函数
{
inti=0;
charch;
while(ch!
='n'&&ch!
='N')//用来判断是否继续输入
{
system("cls");
printf("\t题号:
");
scanf("\t%s",dat[n+i].tihao);
printf("\t题目:
");
scanf("\t%s",dat[n+i].timu);
printf("\n\t是否继续添加?
(Y/N)");
scanf("\t%c",&ch);
i++;
}
return(n+i);//其实输入除了N和n的任意键均能实现继续添加的功能
}
voidList(Datadat[],intn)//显示函数
{
inti;
printf("========================共%d条记录============================\n",n);
printf("┌─────────────────────────────┐\n");/*格式*/
printf("│题号│题目│\n");
printf("└─────────────────────────────┘\n");
for(i=0;i{
printf("%2s\t%3s\n",dat[i].tihao,dat[i].timu);/*按格式输出*/
printf("───────────────────────────────\n");
}
system("pause");
}
intShanchu(Datadat[],intn)//删除函数
{
chars[20];/*要删除记录的题号*/
inti=0,j;
printf("\t请输入想删除记录中的题号:
");
scanf("%s",s);
while(strcmp(dat[i].tihao,s)!
=0&&iif(i==n)
{
printf("\t题库中没有此题!
\n");
return(n);
}
for(j=i;j{
strcpy(dat[j].timu,dat[j+1].timu);
strcpy(dat[j].tihao,dat[j+1].tihao);
}
printf("\t\t\t已经成功删除!
\n");
return(n-1);
}
voidChazhao(Datadat[],intn)//查询函数
{
intj;
printf("\t\n请选择查询方式:
\n");
printf("\t┌──────┐\n");
printf("\t│1------题号│\n");
printf("\t│0------返回│\n");
printf("\t└──────┘\n");
printf("请选择:
");
scanf("%d",&j);
if(j==1)
{
chars[20];
inti=0;
printf("\t请输入想查询的题号:
");
scanf("\t%s",s);
while(strcmp(dat[i].tihao,s)!
=0&&iif(i==n)
{
printf("\t题库中没有此题!
\n");
return;
}
printf("\t此题内容\n");
printf("\t%5s\n",dat[i].timu);
};
}
voidBiangeng(Datadat[],intn)//修改函数
{
chars[20];
inti=0;
printf("\t请输入想修改的试题的题号:
");
scanf("%s",s);
while(strcmp(dat[i].tihao,s)!
=0&&iif(i==n)
{
printf("\t题库中没有此题!
\n");
return;
}
printf("\t题号:
");
scanf("\t%s",dat[i].tihao);
printf("\t题目:
");
scanf("\t%s",dat[i].timu);
printf("\n\t修改成功!
");
}
voidCopyText()//复制文件函数
{
charoutfile[20];/*目标文件名*/
inti,n;
Datatemp[80];
FILE*fp,*fc;
if((fp=fopen("txl.txt","rb"))==NULL)/*打开记录文件*/
{
printf("\t\t不能打开文件\n");/*显示不能打开文件信息*/
exit
(1);/*退出*/
}
printf("\t\t输入目标文件名(例如c:
\\outfile.txt):
");
scanf("%s",outfile);
if((fc=fopen(outfile,"wb"))==NULL)/*打开目标文件*/
{
printf("\t\t不能打开文件\n");/*显示不能打开文件信息*/
exit
(1);/*退出*/
}
fscanf(fp,"%d",&n);/*读出文件记录数*/
fprintf(fc,"%d",n);/*写入目标文件数*/
fprintf(fc,"\r\n");/*写入换行符*/
for(i=0;i{
fscanf(fp,"%s%s\n",temp[i].tihao,temp[i].timu);
fprintf(fc,"%-8s%-6s",temp[i].tihao,temp[i].timu);
fprintf(fc,"\r\n");/*写入换行符*/
}
fclose(fp);/*关闭源文件*/
fclose(fc);/*关闭目标文件*/
printf("\t\t您已成功复制文件!
\n");
}
/*主函数*/
voidmain()
{
intn=0;
for(;;)
{
switch(menu_select())
{
case1:
system("cls");
n=Shuru(da,n);
break;
case2:
system("cls");
intk;
printf("\t\t\t======题库信息管理系统======\n");
printf("\t\t\t┌──────────┐\n");
printf("\t\t\t│1.显示全部题目│\n");
printf("\t\t\t│2.按题号排序信息│\n");
printf("\t\t\t│0.返回上一级菜单│\n");
printf("\t\t\t└──────────┘\n");
printf("\t\t\t============================\n");
printf("\n\t\t请选择:
");
scanf("%d",&k);
switch(k)
{
case1:
//显示信息
system("cls");
List(da,n);
break;
case2:
//题号排序
tihaosort(da,n);
system("pause");
break;
case0:
;
}break;
case3:
system("cls");
intm;
printf("\t\t\t=====题库信息管理系统=====\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│0.返回│\n");
printf("\t\t\t└──────────┘\n");
printf("\t\t\t==========================\n");
printf("\n\t\t请选择:
");
scanf("%d",&m);
switch(m)
{
case1:
system("cls");
Biangeng(da,n);
printf("\t");
system("pause");
break;
case2:
system("cls");
n=Shanchu(da,n);/*删除记录*/
printf("\t");
system("pause");
break;
case3:
system("cls");
n=Charu(da,n);//插入函数
printf("\t");
system("pause");
break;
case0:
;
}break;
case4:
system("cls");
printf("\n\t*****在题库中查找记录******\n");
Chazhao(da,n);
printf("\t");
system("pause");
break;
case5:
system("cls");
intx;
printf("\t\t\t=====题库信息管理系统=====\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│0.返回│\n");
printf("\t\t\t└──────────┘\n");
printf("\t\t\t==========================\n");
printf("\n\t\t请选择:
");
scanf("%d",&x);
switch(x)
{
case1:
n=LoadText(da);
printf("\t\t您已经成功的将题目导入到题库!
\n");
printf("\t");
system("pause");
break;
case2:
printf("\t\t=========题库的保存=========\n");
SaveText(da,n);
printf("\n\t\t保存成功\n");
printf("\t");
system("pause");
break;
case3:
CopyText();/*保存数据*/
printf("\t");
system("pause");
break;
case0:
;
}break;
case0:
printf("\n\t\t\t感谢您的使用,再见!
\n");
exit(0);
}
}
}
5.程序运行结果
(可截屏程序运行界面。
)
1、主界面显示
2、试题的输入
3、函数的保存
4、试题库的载入
5,、试题的浏览与查询
6、函数的修改与删除
6.设计总结
(重点从设计方法、实现技术、功能等几方面总结。
)
通过此次的程序设计课学到了很多,对C语言也有了更好的了解,同时也对C程序的操作和调试也有了进一步的掌握。
尽管程序中的一部分是从网上复制过来的,但其中都加入了自己手动修改的元素,并且把一些以前不懂的弄懂了,总之经过了几天的奋斗我们都掌握了很多知识,收获了很多。
开学的第一天,老师们就让我们分组进行程序设计,题目发下来顿时怵了,只是几个人在一起商量了一下把程序的大致框架熟悉了一下,但由于是头一次搞,根本不知道从哪些地方着手,原本学到的只是到真正运用的时候才显得那么的苍白,就这样整整一个上午的时间什么进展都没有,我们只是在那里看书,熟悉知识。
下午有网了,我们便取巧XX了一个程序进行调试,目的是熟悉分析程序的运转效果,查询整理我们所需要的应用函数,于是才渐渐摸清了我们要进行的方向。
首先,我们要进行的是主体框架的设置,为了节省时间,我们拟在一个运行程序里进行删减,从整体中将“肉”剔除,然后得到我们的主体,刚开始不懂得,只知道将哪来的代码胡乱的删去了事,后来发现程序虽然没错了,但只剩下了一副空壳,原有的功能都没有了。
然后,我们商议给这副“骨架”填“肉”,因为这我们也吃了不少口头,拼命看书了解掌握相应函数如save&load的相关函数,网上查找相应函数的用法以及问题解决办法,再不行的我们就请教老师,也因此吃够了BUG的苦头。
终于,经历了九九八十一难,我们提前完成了程序的调试,欢呼声~~~~
我们从中遇到的问题有N++个,我们也学到了很多知识。
其一、我们刚开始进行试题输入的时候,总是输入后杳无音讯,查无所踪,无法进行浏览和查询,我们网上查