1、 中 国 地 质 大 学 本科生课程论文封面 课程名称 c语 言 课 程 设 计 老师姓名 樊媛媛 本科生姓名 本科生学 本科生专业 所在院系 类别: 日期: 课程设计评语 对课程论文评语: 平时成绩: 课程论文成绩: 总 成 绩: 评阅人署名: 注:1、无评阅人署名成绩无效
2、 2、必需用钢笔或圆珠笔批阅,用铅笔阅卷无效; 3、如有平时成绩,必需在上面评分表中标出,并计算入总成绩。 目 录 课程设计评语 2 目 录 3 1.课程论文题目 4 2.程序设计思绪 4 3.功效模块图 5 4.数据结构设计 5 5.算法设计 6 6.程序代码 13 7.程序运行结果 22 8.编程中碰到困难及处理方法 25 9.总结心得及良好提议 26 10.致谢 26 1.课程论文题目 图书管理系统 2.程序设计思绪 依据要求,图书管理系统以文
3、本文件存放在文件中,故需要提供文件输入、输出等操作;还需要保持统计以进行删除,查询,借书,还书,退出,添加等等操作;另外还有键盘式旋转菜单以实现功效选择模块。 3.功效模块图 图书管理系统 数据输入 查询 数据添加 删除 还书 借书 系统功效模块图 4.数据结构设计 先写主函数main (),然后设计个功效选项,用switch选择,然后进入不一样模块,进行不一样选择,实现不一样功效。每个图书信息设置一个结构体,将输入信息存入文件,提供查询功效,还有删除功效和借书还书功效。每运行一功效后全部返回主界面,方便再次选择,还有设置退出
4、模块,方便退出。 5.算法设计 删除 main () sr() sc() cx() js() jsh() hs() 先定义结构体数组struct books,然后设置主界面,主界面出现6个功效选项,分别是输入sr() 、借书js()、还书hs()、删除sc()、退出tc()、查询cx().各模块设计以下: 输入模块sr(),先调用文件eup,对其进行读取,然后增加,再对其进行保留和调用。其中结构体只输入tsmc图书名称,tsbh图书编号,dj单价,zz作者, 然后自动生成,czzt存在状态,姓名xm,学号xh,性别xb. 查询模块cx(),有选项图
5、书编号和图书名称,然后选择,用if选择,然后用for循环查找,当输入名称和文件中名称相同时,便显示此信息。 删除模块就是在查找功效图书后,选择删除,将strcpy将s[i+1]值赋给s[i]。 借出模块也是在查询基础上,若s[i]存在状态为已借出,则显示已借出,无法再借,若未借出,则将s[i]存在状态czzt变为已借出,然后输入姓名,学号,性别,最终显示出已借出。 还书模块就是在查询基础上,若s[i]存在状态为未借出,则无法归还,若借出,则将存在状态变为未借出,然后自动将姓名,学号,性别变为初始值。 退出模块使flag=1,而在main就有bool flag 且main中已令main=
6、0.这么就实现了退出功效。
其中若输入超出选项值后,全部会显示输入错误,请重新输入。若字符错误,程序就直接出现错误了。
6.程序代码
#include
7、]; int N; bool flag; int main () { int sele; flag=0; sele=1; void sr(); void cx(); void sc(); void js(); void hs(); void tc(); void jsh(); //system ("tsgl"); printf("\n\n"); printf(" ************************\n"); printf(" 1:输入 2:查询 3:删除 \n"); printf(" 4:借书 5:
8、还书 0:退出 \n"); printf(" ************************\n"); while(1) { printf("\n\n请输入功效序号:"); scanf ("%d",&sele); if(sele>=0 && sele<=5) { switch(sele) { case 1:sr();break; case 2:cx();break; case 3:sc();break; case 4:js();break; case 5:hs();break; ca
9、se 0:jsh();break; } if(flag) break; printf("\n\n"); printf(" ************************\n"); printf(" 1:输入 2:查询 3:删除 \n"); printf(" 4:借书 5:还书 0:退出 \n"); printf(" ************************\n"); } else { printf("输入错误请再次输入|\n\n"); printf("\n\n"); printf(" ***
10、\n"); printf(" 1:输入 2:查询 3:删除 \n"); printf(" 4:借书 5:还书 0:退出 \n"); printf(" ************************\n"); } printf("\n\n让任意键继续\n"); } //wr_file(); } /******主函数***/ /*********输入*********/ void sr() { int n,i; N=0; printf("可输入书本数:"); scan
11、f("%d",&n); N=n+N; printf("请输入相关信息:\n"); for(i=1;i<=n;i++) { printf("图书名称:"); scanf("%s",s[N-n-1+i].tsmc); printf("图书编号:"); scanf("%d",&s[N-n-1+i].tsbh); printf("单价:"); scanf("%f",&s[N-n-1+i].dj); printf("作者:"); scanf("%s",&s[N-n-1+i].zz); strcpy(s[N-n-1+i].czzt,"未借出"); s
12、trcpy(s[N-n-1+i].xm,"无");
}
}
/********查询**********/
void cx()
{
int i,j[100]={-1},d,k,t=0;
char m[20];
printf("查询:");
printf("1:图书名称 2:图书编号");
printf("\n\n请输入查询选项:");
scanf("%d",&k);
if(k==1)
{
printf("请输入图书名称:");
scanf("%s",m);
for(i=0;i 13、if(strcmp(m,s[i].tsmc)==0)
{
j[t]=i;
t=t+1;
}
}
else if(k==2)
{
printf("请输入图书编号:");
scanf("%d",&d);
for(i=0;i 14、\t存在状态 \t借书人姓名 \t性别 \t学号\n");
for(i=0;i 15、ar ms[20];
int ja=-1;
printf("查询:");
printf("1:图书名称 2:图书编号");
printf("\n\n请输入查询选项:");
scanf("%d",&k);
if(k==1)
{
printf("请输入图书名称:");
scanf("%s",ms);
for(i=0;i 16、图书编号:");
scanf("%d",&d);
for(i=0;i 17、mc);
s[i].tsbh=s[i+1].tsbh;
s[i].dj=s[i+1].dj;
strcpy(s[i].zz,s[i+1].zz);
strcpy(s[i].czzt,s[i+1].czzt);
strcpy(s[i].xm,s[i+1].xm);
strcpy(s[i].xb,s[i+1].xb);
s[i].xh=s[i+1].xh;
}
}
else if(ja==-1)
printf ("没有找到!\n");
}
/**********借书模块***********/
void js( 18、)
{
int i,j[100]={-1},d,k,t=0;
char m[20];
printf("查询:");
printf("1:图书名称 2:图书编号");
printf("\n\n请输入查询选项:");
scanf("%d",&k);
if(k==1)
{
printf("请输入图书名称:");
scanf("%s",&m);
for(i=0;i 19、 }
}
else if(k==2)
{
printf("请输入图书编号:");
scanf("%d",&d);
for(i=0;i 20、f %s %s %s %s %d ",
s[j[i]].tsmc,s[j[i]].tsbh,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh);
}
printf("1:确定借阅 2:退出\n");
scanf("%d",&k);
switch(k)
{
case 1:printf("请输入学号:\n");
scanf("%d",&s[j[i]].xh);
printf("请输入姓名:\n");
scanf("%s",&s[j[i]].xm);
printf("请 21、输入性别:\n");
scanf("%s",&s[j[i]].xb);
strcpy(s[j[i]].czzt,"已借出");
printf("已借出,按任意键继续\n");
//getch();
case 2:break;
}
}
/*************还书模块***************/
void hs()
{
int i,j[100]={-1},d,k,t=0;
char m[20];
printf("查询:");
printf("1:图书名称 2:图书编号");
printf(" 22、\n\n请输入查询选项:");
scanf("%d",&k);
if(k==1)
{
printf("请输入图书名称:");
scanf("%s",&m);
for(i=0;i 23、 {
j[t]=i;
t++;
break;
}
}
if(t==0)
printf("没有找到!\n");
else
{
printf("%s %f %s %s %s %s %d \n",
s[j[i]].tsmc,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh);
printf("1:确定归还 2:退出\n");
int p;
scanf("%d",&p);
if(p==1)
{
strcpy(s[j[i]]. 24、czzt,"未借出");
strcpy(s[j[i]].xm,"无");
s[j[i]].xh=0;
printf("已归还,按任意键继续\n");
}
//getch();
}
}
/*************结束模块***************/
void jsh()
{
flag=1;
}
7.程序运行结果
各模块均能实施。
8.编程中碰到困难及处理方法
做程序时,文件函数无法实现,于是找了同学跟我讲解,看书还有就是看例子等等,最终找出了个处理方案。还有系统最初运行时有很多不尽人意,比如我期望每次运行后全部出现主界面,这么方便选择。假如出现错误话,要显示犯错误原因,并给出提醒,我处理了多个这么问题,比如借书时假如已借出就要显示出“已借出,请重新选择”,假如没有,就显示无法找到,并显出主菜单,再次选择。
9.总结心得及良好提议
对于程序设计,必需先了解c语言部分知识,用起来才会得心应手,最好之前就想好大致用什么算法去实现需要程序。对于举一反三内容不是用来抄,我们必需要先对其了解,这么才能写好一个程序。程序中最复杂感觉是调试,有时候自己有很多习惯性错误真极难找到,全部要形成好习惯。还有就是要养成好思维,要多练习,不能眼高手低。
10.致谢






