秦思军《C语言课程设计》课程设计.docx

上传人:b****7 文档编号:15585482 上传时间:2023-07-05 格式:DOCX 页数:50 大小:464.56KB
下载 相关 举报
秦思军《C语言课程设计》课程设计.docx_第1页
第1页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第2页
第2页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第3页
第3页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第4页
第4页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第5页
第5页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第6页
第6页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第7页
第7页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第8页
第8页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第9页
第9页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第10页
第10页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第11页
第11页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第12页
第12页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第13页
第13页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第14页
第14页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第15页
第15页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第16页
第16页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第17页
第17页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第18页
第18页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第19页
第19页 / 共50页
秦思军《C语言课程设计》课程设计.docx_第20页
第20页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

秦思军《C语言课程设计》课程设计.docx

《秦思军《C语言课程设计》课程设计.docx》由会员分享,可在线阅读,更多相关《秦思军《C语言课程设计》课程设计.docx(50页珍藏版)》请在冰点文库上搜索。

秦思军《C语言课程设计》课程设计.docx

秦思军《C语言课程设计》课程设计

 

YangtzeUniversityCollegeofArtsandScience

学生实习手册

(课程设计报告)

学部:

理工学部

专业:

电子信息工程

班级:

5111班

姓名:

秦思军

学号:

20114002

课程名称:

C语言程序设计课设

指导教师:

杜红呙明辉

实习时间:

2012年7月6日至2012年7月14日

 

一、课设题目

图书管理系统

二、设计目的

问题描述:

本程序属于非数值计算型算法设计,学生需要设计出图书馆模拟系统所需要的基本功能,并设计简单的界面(无需图形化)。

实现功能:

1、通过提示菜单选择可以进行的操作

2、将图书的基本信息存入文件中,并命名为book.txt

3、将图书借阅统计信息存入文件中,并命名为record.txt

4、将图书卡号统计信息存入文件中,并命名为card.txt

4、在本系统中可以进行管理系统包含的基本操作,其中包括:

a)输入图书的图书名或作者名,从当前图书中进行查找,如果找到则显示该图书的相关信息,如果没有找到则给出提示信息;

b)添加图书的基本信息,通过输入图书相关信息,首先查找是否存在该图书名的图书,如果存在则提示重新输入,否则将该图书按照顺序插入到相应位置;

c)修改图书的基本信息,通过输入图书名,首先查找是否存在该图书名的图书,如果存在则提示重新输入,否则将提示修改项(序号、书名、作者、单价),依据提示进行修改;

d)删除图书的基本信息,通过输入图书名,首先查找是否存在该图书名的图书,如果存在则将该图书删除,否则给出提示信息,提示该图书不存在;

e)借阅图书,需要给出卡号和图书书名,如果图书名不存在则重新输入,直到输入正确为止,并将学号和相应的图书名存入record.txt文件中。

f)归还图书,需要输入卡号和图书书名,如果图书名不存在则重新输入,直到输入正确为止,然后确认归还;

g)统计分为对在架图书、学生借阅图书、借书卡三项的统计,申请卡号借阅书籍会对三项统计进行修改,显示。

5、图书基本信息包括图书序号、书名、作者、单价、状态这些简单信息。

6、图书信息文件中每一行存放一本图书的信息。

7、借阅信息文件中每一行存放一本书的借阅情况。

掌握知识点:

本程序主要考察对自定义函数的熟悉程度,本程序中主要使用到的是数组和文件的相关操作,包括数组的输入、输出、查找、插入、删除、修改和文件不同形式的读取、写入等操作,需要对数组和文件有比较深入的掌握。

三、总体设计

1、图书管理系统组成框图

2、调用的借阅、卡号统计函数流程图

3、调用的删除图书、卡号函数流程图

4、调用修改图书函数流程图

四、详细设计

模块功能说明:

(包括结构体、借阅统计函数、卡号统计函数、删除图书函数、删除卡号函数、修改图书函数)

1、结构体:

包括学生借阅信息、图书相关信息、借阅卡信息

structstudent//学生借阅信息结构体

{

intcardnum;//卡号

charborrowbook[10];//借阅图书

}student[100];

structbook//图书相关信息结构体

{

intbooknum;//图书序号

charbookname[20];//图书名

intbookprice;//图书单价

charbookauthor[20];//图书作者

intstatus;//图书状态

}book[100];

structcard//借阅卡信息结构体

{

intcardnum;//卡号

charsex[4];//性别

charstudentname[20];//学生姓名

intstudentclass;//学生班级

}card[100];

2、借阅统计函数功能:

在被调用时,将图书库里的所有被借图书统计起来,当增加或删除图书时,不能改变此统计结果;当借出或归还时,才能改变它;(此函数无参数,所以无参数说明和函数调用关系)

borrowcount()//借阅统计

{

system("cls");//清屏

FILE*fp;

inti,n=0;

printf("\n\t\t\t借书统计\n\n");//进入借书统计界面

fp=fopen("record.txt","r");//将文件record.txt以读的方式打开

for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!

=0;i++)

{

printf("\t卡号\t\t借出的书籍\n");

printf("\t%d\t\t%s\n",student[i].cardnum,student[i].borrowbook);

n=n+1;//读一次就在统计上加一

}

fclose(fp);

printf("目前共有%d本书借出\n返回三级菜单\n",n);

getche();

return0;

}

3、卡号统计函数功能:

在被调用时,将在此图书馆办理借阅卡统计起来,当增加或删除卡时,能改变此统计结果;(此函数无参数,所以无参数说明和函数调用关系)

cardcount()//卡号统计

{

system("cls");//清屏

FILE*fp;

inti,n=0;

printf("\n\t\t\t卡号统计\n\n");//进入卡号统计界面

fp=fopen("card.txt","r");//将文件card.txt以读的方式打开

for(i=0;fread(&card[i],sizeof(structcard),1,fp)!

=0;i++)

{

printf("第%d张卡\n",i+1);

printf("\t卡号\t\t性别\t\t姓名\t\t班级\n");

printf("\t\t\n");

printf("\t%d\t\t%s\t\t%s\t\t%d\n",card[i].cardnum,card[i].sex,card[i].studentname,card[i].studentclass);

n=n+1;//读一次就在统计上加一

}

fclose(fp);

printf("\n目前共有%d个学生\n按任意键返回三级菜单\n",n);

getche();

}

4、删除图书函数功能:

在被调用时,将图书库里需要删除的书籍删除,不需考虑其是

借出(此函数无参数,所以无参数说明和函数调用关系)

delbook()//删除图书

{

system("cls");

FILE*fp,*fp2;

inti;

charbookname[10],choice;

printf("\n\t\t\t删除图书\n\n");//进入删除图书界面

fp=fopen("book.txt","r");//将文件book.txt以读的方式打开

fp2=fopen("book1.txt","w");//将文件book1.txt以写的方式打开printf("\t书名:

\n\t");

scanf("%s",bookname);

for(i=0;fread(&book[i],sizeof(structbook),1,fp)!

=0;i++)

{

if(strcmp(bookname,book[i].bookname)!

=0)

//通过比较,在图书库里寻找所删除的图书

{

fwrite(&book[i],sizeof(structbook),1,fp2);

//将非删除的所有书写到book1.txt

}

}

fclose(fp);

fclose(fp2);

printf("\t确认删除(y/n)?

\n\t");

getchar();

scanf("%c",&choice);

if(choice=='y'||choice=='Y')

{

fp=fopen("book.txt","w");

fp2=fopen("book1.txt","r");

for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!

=0;i++)

{

fwrite(&book[i],sizeof(structbook),1,fp);

//将book1.txt里数据写到book.txt

}

fclose(fp);

fclose(fp2);

fp2=fopen("book1.txt","w");

fclose(fp2);//清空临时文件book1.txt

printf("\t删除成功,按任意键返回三级菜单……\n");

getchar();

return0;

}

else

{

printf("\t按任意键返回……\n");

getche();

return0;

}

}

5、删除卡号函数功能:

在被调用时,将卡号库里面需要删除的卡号删除;(此函数无参数,所以无参数说明和函数调用关系)

delcard()//删除卡号

{

system("cls");

FILE*fp,*fp2;

inti;

intcardnum;

charchoice;

printf("\n\t\t\t删除卡号\n\n");//进入删除卡号界面

fp=fopen("card.txt","r");

fp2=fopen("book1.txt","w");

printf("\t要删除的卡号(不存在则不作改动):

\n\t");

scanf("%d",&cardnum);

for(i=0;fread(&card[i],sizeof(structcard),1,fp)!

=0;i++)

{

if(card[i].cardnum!

=cardnum)

{//通过比较,在卡号库里寻找所删除的卡号

fwrite(&card[i],sizeof(structcard),1,fp2);

}//将非删除的卡号写到book1.txt

}

fclose(fp);

fclose(fp2);

printf("\t确认删除?

(Y/N)!

\n\t");

getchar();

scanf("%c",&choice);

if(choice=='y'||choice=='Y')

{

fp=fopen("card.txt","w");

fp2=fopen("book1.txt","r");

for(i=0;fread(&card[i],sizeof(structcard),1,fp2)!

=-0;i++)

{

fwrite(&card[i],sizeof(structcard),1,fp);

}//将book1.txt里数据写到card.txt

fclose(fp);

fclose(fp2);

fp2=fopen("book1.txt","w");

fclose(fp2);//清空临时文件book1.txt

printf("\t删除成功,返回三级菜单……\n");

getchar();

return0;

}

else

{

getchar();

printf("\t操作已取消!

\n按任意键返回……\n");

getche();

return0;

}

}

6、修改图书函数功能:

在其被调用时,将需修改的图书基本信息进行修改,分为对图书序号、图书名、作者及单价的修改;(此函数无参数,所以无参数说明和函数调用关系)

changebook()//修改图书

{

system("cls");

FILE*fp,*fp2;

charbookname[10],choice;

inti;

printf("\n\t\t\t修改图书\n\n");//进入修改图书界面

fp=fopen("book.txt","r");

fp2=fopen("book1.txt","w");

printf("\t书名:

\n\t");//输出需修改的书名

scanf("%s",bookname);

getchar();

for(i=0;fread(&book[i],sizeof(structbook),1,fp)!

=0;i++)

{

if(strcmp(book[i].bookname,bookname)==0)//寻找所需修改的图书

{

printf("\t你所要修改的书的资料如下,请选择你要修改的内容:

\n");

printf("\t序号\t\t书名\t\t作者\t\t单价\n");printf("\t%d\t\t%s\t\t%s\t\t%d\n",book[i].booknum,book[i].bookname,book[i].bookauthor,book[i].bookprice);

printf("\n\t1:

修改书号:

\n");

printf("\t2:

修改书名:

\n");

printf("\t3:

修改作者:

\n");

printf("\t4:

修改单价:

\n");

printf("\t请输入-4:

\n\t");

choice=getchar();

switch(choice)//选择1-4的不同修改项

{

case'1':

{

printf("\t新的书号:

\n\t");

scanf("%d",&book[i].booknum);

fwrite(&book[i],sizeof(structbook),1,fp2);

}break;

case'2':

{

printf("\t新的书名:

\n\t");

scanf("%s",book[i].bookname);

fwrite(&book[i],sizeof(structbook),1,fp2);

}break;

case'3':

{

printf("\t新的作者:

\n\t");

scanf("%s",book[i].bookauthor);

fwrite(&book[i],sizeof(structbook),1,fp2);

}break;

case'4':

{

printf("\t新的单价:

\n\t");

scanf("%d",&book[i].bookprice);

fwrite(&book[i],sizeof(structbook),1,fp2);

}break;

default:

printf("\t没有这样的操作!

");break;

}

getchar();

continue;

}

fwrite(&book[i],sizeof(structbook),1,fp2);

//将修改后的图书信息写入book1.txt

}

fclose(fp);

fclose(fp2);

fp=fopen("book.txt","w");

fp2=fopen("book1.txt","r");

{

for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!

=0;i++)

{

fwrite(&book[i],sizeof(structbook),1,fp);

//将book1.txt数据写入book.txt

}

printf("\t修改成功,按任意键返回二级菜单\n");

getche();

}

fclose(fp);

fp2=fopen("book1.txt","w");//将临时文件清空

fclose(fp2);

}

五、运行结果及分析

1、调用借阅统计函数时的运行结果

2、调用卡号统计函数时的运行结果

3、调用删除图书函数时的运行结果

 

4、调用删除卡号函数时的运行结果

 

5、调用修改图书函数时的运行结果

六、调试与测试

调试就是利用软件的功能将程序的每一步按照流程走一次,如果出现问题就能很直接,很精确地找出问题的所在,从而更好地解决问题。

调试方法:

将断点设在需检测的程序语句的首段,特别是要在关键、易出错的地方;然后开始调试,按照要求一步一步的进行,遇到停止的地方说明此处有问题,还可以在watch里面输入你要观察的变量这样就更直接的观察程序是怎样运行的,看是不是按照自己的程序思想在进行。

测试结果的分析:

在运行测试某段程序时,如果程序一直按照编译者的初衷来运行,并且没有“卡壳”,说明测试结果理想;否则,就是程序出现问题,就得分析原因,找出症结所在,在不断的更改讨论和调试运行中,得出最好的解决方案。

在此,我调试了一下删除图书函数与主函数的连接及调用函数运行的过程:

 

1、调用删除函数drlbook()之前在主函数里

2、调用此函数即转到此函数当中

3、在此函数里面正常运行

在此次我负责的程序段中,我是首先运行是否有错,功能是否实现,最后才进行调试,并且调试的结果是理想的,所以没有在调试中遇到问题。

七、课程设计心得及体会

本次课程设计经历地十分辛苦,想必都有这个体会(老师也不例外),这就是我们在上半学期没有更好地学习C语言知识,同时也没有接触课外有关于C语言方面的知识,才导致我们一下碰到这么复杂,从没接触过的课设(对于我们而言);但是也就是因为这种情况,我才意识到自己这方面的知识太薄弱了,什么事、知识都不能一味地考老师来教,自己得有自觉学习的能力和习惯。

在编程的一个多星期里,以小组为单位的我们表现了团队的力量,分工明确,虽然途中遇到过很多困难,我们依然坚定地解决了,最后完成了设计。

再说一下我自己在这个过程当中的体会:

编程的过程使我了解到我还有好多东西没有掌握,或者没有接触到的知识点,但是也通过自己的自学、请教老师、同学,学到了不少东西,例如:

在编程方面对结构体的理解与运用,熟练运用文件,学会怎样去调试某段程序使之运行得当;在计算机方面,学会了好多有关计算机方面的知识……

总结:

本次课程设计虽然“历经磨难”,但也“硕果累累”,不仅是一个挑战,更是一个提醒,提醒我大学应该做什么,怎样学习才更有效,将来步入社会,将何去何从等等一系列“有营养”的话题。

最后,我还期待着下一个课程设计会给我带来什么“营养”,我将拭目以待……

八、源程序清单和执行结果:

#include

#include

#include

#include

#include

 

structstudent//学生借阅信息结构体

{

intcardnum;//卡号

charborrowbook[10];//借阅图书

}student[100];

structbook//图书相关信息结构体

{

intbooknum;//图书序号

charbookname[20];//图书名

intbookprice;//图书单价

charbookauthor[20];//图书作者

intstatus;//图书状态

}book[100];

structcard//借阅卡信息结构体

{

intcardnum;//卡号

charsex[4];//性别

charstudentname[20];//学生姓名

intstudentclass;//学生班级

}card[100];

 

search_by_name()//按图书名查阅

{

FILE*fp;

charbookname[10];

inti,flag=0;

fp=fopen("book.txt","r");

printf("\t请输入你要查找的书名:

\n\t");

scanf("%s",bookname);

for(i=0;fread(&book[i],sizeof(structbook),1,fp)!

=0;i++)

{

//将book.txt内容读到图书数组

if(strcmp(bookname,book[i].bookname)==0)

{//通过比较,在图书库里查询要找的书

flag=1;

if(book[i].status==1)

{

//当图书存在status==1输出相关信息

fclose(fp);

printf("\t书号\t\t书名\t\t作者\t\t单价\n\t%d\t\t%s\t\t%s\t\t%d\n",book[i].booknum,book[i].bookname,book[i].bookauthor,book[i].bookprice);

printf("\t此书无人借阅\n");//status==1

}

else

{

printf("\t这本书已经有人借出\n");//status==0

fclose(fp);

return0;

}

}

}

if(flag==0)

{

printf("\t没有你要查询的书籍!

\n");

fclose(fp);

}

return0;

}

 

search_by_author()//按作者名查阅

{

FILE*fp;

charbookauthor[10];

inti,flag;

fp=fopen("book.txt","r");

printf("\t请输入你要查找的作者名:

\n\t");

scanf("%s",bookauthor);

for(i=0;fread(&book[i],sizeof(structbook),1,fp)!

=0;i++)

{

//将book.txt内容读到图书数组

if(strcmp(bookauthor,book[i].bookauthor)==0)

{

//通过比较,在图书库里查询要找的书

flag=1;

if(book[i].status==1)//当图书存在status==1输出相关信息

{

fclose(fp);

printf("\t书号\t\t书名\t\t作者\t\t单价\n\t%d\t\t%s\t\t%s\t\t%d\n",book[i].booknum,book[i].bookname,book[i].bookauthor,book[i]

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2