c语言课程设计报告.docx
《c语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告.docx(47页珍藏版)》请在冰豆网上搜索。
c语言课程设计报告
程序设计语言
课程设计报告
选题名称:
图书馆管理系统
小组组长姓名(学号):
赵政康()
组员姓名(学号):
张涛()周杰文()
任课教师:
陈腊梅
报告递交日期:
2009年9月8日
第一章C语言课程设计任务书
一、课程设计目的
程序设计语言课程设计是学生在学习完C语言课程后集中安排的1周的实践技能训练环节。
它的目的是通过实践环节的训练,使学生进一步加深对C语言知识的综合理解,提高C语言应用技能,并结合专业特点培养学生计算机程序的应用能力。
本环节结合计算科学专业的特点,培养学生阅读本专业相关领域C语言程序的能力,分析并掌握程序的设计思想和方法。
通过训练,培养学生查阅C语言相关资料能力、分析和阅读程序的能力,应用C语言基本知识设计小型应用程序的能力。
二、课程设计题目(自选题目1个)
1、C语言图形(动画)演示
2、学生成绩管理
3、个人通讯录
4、简易计算器
5、图书管理系统
三、课程设计内容(课程设计所应完成的主要环节或项目)
1、C语言图形(动画)演示:
目 标:
设计一个各种几何图形的C语言的演示程序,或者设计一个小型的动画或游戏程序。
要 求:
掌握C语言图形设计技术,熟练应用条件语句、循环语句、定义函数、数组或结构体,演示程序要有菜单功能,动画设计要有提示功能。
自行设计的程序不少于100行。
程序要有详细的注释,并画出程序流程图及必要的说明文档。
2、学生成绩管理:
目 标:
输入5—10名学生有关的数据,先存放在内存中,根据需求增加新记录或打印已有记录清单。
成绩录入(3--5门)后存盘,要统计学科最高分、最低分、平均分、全班名次、成绩分布等。
要 求:
具备菜单功能或详细的提示功能,至少具备数据输入、输出、查询、删除、文件保存、文件读入中的两项功能。
能力强的同学可以设计表格化输出。
3、个人通讯录:
目 标:
设计一个能显示的个人通讯录程序,包涵15—20个有关的数据,具备输入、查询、插入、删除等功能。
要 求:
具备菜单功能或详细的提示功能,具备汉字输入输出功能,至少具备数据输入、输出、查询、删除、文件保存、文件读入中的两项功能。
能力强的同学可以设计表格化输出。
熟练掌握文件或结构体的操作,程序中至少要有一个自定义结构体和文件。
4、简易计算器
目标:
设计一个能进行简单的计算器,能够实现整数的加、减、乘、除四则运算。
该程序显示用GUI用户界面。
用图形界面实现。
要求:
熟悉C语言图形模式下的编程。
熟练掌握结构体、数组、绘图等方面的知识。
5、设计图书管理系统
主要功能:
1、新书入库
2、借阅登记、管理
3、借阅查询
4、催还、预约
5、遗损处理
要求:
能实现以上基本功能,界面友好、清晰
(注意:
该题可以自由发挥其它功能,但要求用结构体数组、文件、函数等工具来处理,也可以用指针、链表等工具来处理)
四、课程设计涉及知识范围(主要的先修课程及有关的实践环节)
1、C语言程序设计基本理论知识和上机编程的基本技能;
五、课程设计方法、步骤和要点(结合设计题目撰写)
1、教师指导:
教师讲解集中周的任务、目的、方法。
介绍各个题目的基本知识和设计方法及相关内容演示,学生根据个人兴趣选题。
2、资料调研:
学生根据选题情况,查阅相关资料,确定设计目标和任务。
3、画出程序框图和功能说明;详细编写程序和调试。
最后提交设计报告,进行程序演示,教师进行成绩评定。
六、课程设计主要技术关键的分析、解决思路和方案比较等
1、 资料查找:
可以通过图书、网络等方式查找。
在网络查找时注意关键词的选用,如“C语言绘图”、“C语言图形设计”、“C语言科学计算”等。
2、 基本知识掌握:
课程设计中必须要涉及到书本中没讲到的内容,在教师指导情况下,同学要主动掌握这些技能,查阅资料,把握关键技术,上机验证。
如图形模式的设置,图形函数的使用,结构体、数组及指针的应用。
要注意已学知识要巩固,加深理解并能主动应用。
未学知识部分要学会查找自己需要的知识,学会筛选知识,做好笔记,进行验证。
3、 阅读程序:
在初次编写程序时,建议先查找并阅读类似功能程序,分析作者思路,学习编程的方法。
执行“先模仿再创新”的技术路线。
4、 设计阶段:
在程序功能设计中要注意“从上到下,从宏观到具体”的原则,main函数要简洁。
功能选择的难度要合适,不要贪图功能齐全,要注重程序的质量。
5、 调试阶段:
注意大程序的调试方法和技巧。
报告撰写阶段:
按照学校要求格式撰写,注意条理清晰,语言流畅。
可以引用一些资料,但不能照抄照搬(引用资料要注明出处)。
七、课程设计注意事项(学习态度、学习方法、资料使用、基本技能运用等)
1、 在思想认识上,学生应高度重视课程设计对掌握C语言的重要性,由于课程设计是在考试后进行,学生应知道通过课程设计加深对C语言的了解。
2、 在学习态度上,应当勤奋。
课程设计时间紧,困难不少,因此要有主动解决困难的勇气和方法,不能有畏难情况和敷衍情绪。
应当积极利用课内外时间,完成任务。
3、 在学习方法上,要注意充分运用教师的指导作用,及时和教师沟通。
同学也要及时研究交流。
4、 教师在设计题目时要充分考虑学生的兴趣、学生能力,并和专业相结合;教师在指导中要激发同学的兴趣,鼓励同学进行大胆创新。
八.设计方式和安排
1.分组选题:
最多3人一组,每组一个课题(可根据课题,工作量大小,合理分配人数)每组设组长一名,负责该组设计工作的协调、分工。
2.设计过程:
1)分析设计准备阶段(按组讨论、对系统功能进行分析,确定算法,并进行明确分工)
2)编程调试阶段(绘制流程图,编制源程序;上机调试,修改程序)
3)总结报告和书写说明书阶段(撰写上交相关资料)
九、课程设计及报告书具体要求:
1.必须独立思考、设计、调试通过程序,满足任务书要求,可参考例程。
2.报告书的书写格式参照以下条目,使用B5纸张,打印、手工书写均可。
3.首页为封面,要求写清楚标题、班级、姓名、指导教师、完成日期。
(自行设计)
4.第一章为任务书。
5.第二章为老师评语。
6.从第三章开始,为报告书正文,具体内容如下:
①整个程序的功能分析,并根据分析画出流程图。
②组成程序的各个模块分析、实现。
③附程序清单。
④系统设计难点及其解决方法
⑤不足之处
⑥人员分工说明
⑦本次课程设计的小结与参考文献
十、推荐参考资料
1、《C语言程序设计实验指导与课程设计》
清华大学出版社游洪跃等主编
2、《C语言课程设计案例精编》清华大学出版社姜灵芝等主编
第二章教师评语
组长:
成员:
第三章课设报告正文
1、程序功能简介
该程序用于学校图书馆事务管理,能够实现以下几项功能:
新书入库、借阅查询、借阅登记管理、图书馆职工资料整理修正。
2、程序功能分析
程序的总体程序框图图如下:
从这里不难看出,各个模块之间的关系是相互联系的。
首先,主函数包含了所有的子函数。
主函数是整个程序的核心。
子函数之间也是有联系的,查书,借书,还书是在加入图书和学生信息明确后的情况下才能进行的,所以图书加入模块和学生信息管理模块是非常重要的!
3、组成程序的各个分析、实现
3.1主函数程序(N-S)流程图及运行界面
主函数main()
定义变量charch1,ch2,ch3,ch4;
textbackground(6);textcolor(7);定义窗口和字体颜色
switch(ch1)
case'1':
chabook();break;查书
case'2':
lendbook();;break;借书
case'3':
switch(ch2)系统管理
case'1':
addbook();break;添加新书
case'2':
delbook();break;删除图书资料
case'3':
changebook();break;修改图书资料
case'4':
bookcount();getch();break;书籍统计
case'5':
switch(ch3)职工资料管理
case'1':
addemploy();getch();break;
case'2':
delemploy();break;
case'3':
changemploy();break;
case'4':
employcount();getch();break;
case'6':
switch(ch4)学生资料管理
case'1':
addcar();break;
case'2':
delcar();break;
case'3':
lendcount();break;
case'4':
carcount();break;
case'0':
exit(0);break;返回主界面
case'4':
huanbook();break;还书
case'0':
exit(0);退出程序
3.2运行程序界面截图如下:
主界面
查书界面
借书界面
系统设置界面
3.3源程序各模块中函数分析:
1)程序使用了5个头文件#include是输入输出头文件;#includeANSIC标准要求在使用字符串函数时要包含的头文件;#include是#include是#include是ANSIC标准要求的在使用字符函数时要包含的头文件。
2)程序中包含不少预处理命令,除去头文件预处理,为了使程序简明,还加入了许多宏定义预处理,即定义符号常量,#defin是宏定义命令。
3)源程序中使用关键字struct声明类,比如structstudent定义一个学生类型,用于存放借出的书籍;structemploy定义一个职工类型等等。
4)还书函数huanbook()
说明:
这是一个用户自定义函数,下面是其定义的数据
FILE*fp,*fp2;/*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/
inti,n;/*定义两个整型数据*/
intcarnum;/*定义整型卡号数据*/
charlendbook[10];/*定义一个字符数组来存储借出的书籍*/
先使用if语句判断使用者的身份,即卡号验证;接着键入要还之书,用for语句判断图书借阅档案是否正确;下面再用fwrite函数重置该书的资料,即是否被借阅。
该函数中用到指针,fp=fopen("record.txt","r");/*fp中存放有car.txt(卡号信息)record.txt(借书的学生信息)*/
构造一系列函数fwrite(),fclose(),fopen()等等,使还书,修改资料一并完成,一气呵成,不拖泥带水!
5)查书函数chabook()
说明:
使用switch语句,分出两种查询方法,case‘1’:
按照书名查询;case‘2’:
按照作者查找。
图书资料的给出,是通过构造类实现的,使用struct构造book类,类内包含的数据有:
书的序列号intbookcar,书名charbookname,作者charbookcreater,图书是否被借出Inttureflase
6)借书函数lendbook()
还是先定义变量:
FILE*fp,*fp2;
inti,n;
intcarnum;
定义了指针变量,通过使用printf输入函数输入用户卡号,将for语句和if语句嵌套使用验证无误后,在输入要借书名,再一次forif嵌套验证是否有存量,最后通过构造的一系列函数fwrite(),fclose(),fopen()等等,使借书,修改资料一并完成,一气呵成,不拖泥带水!
7)职工信息管理模块
定义职工类structemploy,类内包含信息有编号intemploynum,姓名charemplorname,年龄intemployage,性别charemploysex【2】,工资longint
Employtage。
使用switch语句选择操作。
学生信息管理与之类似。
8)新书入库模块addbook()/*增加图书函数*/
{
FILE*fp;
inti=0;
charchoice='y';
fp=fopen("book.txt","a+");
while(choice=='y'||choice=='Y')
{
printf("请你输入第%d本书的序号\n",i+1);
scanf("%d",&book[i].booknum);
printf("请你输入书名\n");
scanf("%s",book[i].bookname);
printf("请你输入书的作者\n");
scanf("%s",book[i].bookcreat);
printf("请设为1或0,1代表书还没人借,0表示书已经借出\n");
printf("请你设定书的状态\n");
scanf("%d",&book[i].turefalse);
fwrite(&book[i],sizeof(structbook),1,fp);
printf("是否要输入下本书,N代表\"否\",Y代表\"是\"\n");
scanf("%s",&choice);
}
fclose(fp);
}
就是不断使用printf和是scanf函数输入新书信息并验证,保存。
3.4源程序:
#include
#include
#include
#include
#include
#defineSTACK_INIT_SIZE10
#defineOK1
#defineTRUE1
#defineFALSE0
#defineERROR0
structstudent/*定义学生类型,用于存放借出的书籍*/
{
intcarnum;
charlendbook[10];
}student[1000];
structemploy/*定义职工类型*/
{
intemploynum;/*职工的编号*/
charemployname[15];/*职工的名字*/
intemployage;/*职工年龄*/
charemploysex[2];/*职工的性别*/
charemployleve[10];/*职工学历*/
longintemploytage;/*职工工资*/
}employ[50];
structbook/*定义书的类型*/
{
intbooknum;/*书的序列号*/
charbookname[10];/*书名*/
charbookcreat[10];/*书的作者*/
intturefalse;/*用于借书和还书模块判断一本书是否借出的条件*/
}book[1000];
structcar/*借书卡的数据类型*/
{
intcarnum;/*卡号*/
charstudentname[10];/*卡主人*/
intstudentclass;/*卡主人的班级*/
}car[1000];
huanbook()/*还书函数*/
{
FILE*fp,*fp2;/*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/
inti,n;
intcarnum;
charlendbook[10];
printf("Typeyourcardnum!
\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r");/*读取卡号记录*/
for(i=0;fread(&car[i],sizeof(structcar),1,fp)!
=0;i++)/*fread(&car[i],sizeof(structcar),1,fp)!
=0判断是否读到文件尾*/
{
if(car[i].carnum==carnum)/*卡号存在,进入下一循环*/
{
n=i;
fclose(fp);
printf("typethenameofthereturningbook!
\n");
scanf("%s",lendbook);
fp=fopen("record.txt","r");/*fp中存放有car.txt(卡号信息)record.txt(借书的学生信息)*/
for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!
=0;i++)/*判断是否借阅了输入的书*/
{
if(strcmp(student[i].lendbook,lendbook)==0)/*借阅了该书,进入下一循环,否则出错显示*/
{
fclose(fp);
fp=fopen("record.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!
=0;i++)
{
if(strcmp(student[i].lendbook,lendbook)==0)
{
continue;/*删除还掉的书的借书记录*/
}
fwrite(&student[i],sizeof(structstudent),1,fp2);/*写入原来没还的书的记录*/
}
fclose(fp);
fclose(fp2);
fp=fopen("record.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&student[i],sizeof(structstudent),1,fp2)!
=0;i++)/*=o是读到结束*/
{
fwrite(&student[i],sizeof(structstudent),1,fp);/*将借书记录信息写回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w");/*清临时文件的记录*/
fclose(fp2);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)/*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/
{
if(i==n)
{
book[i].turefalse=1;
fwrite(&book[i],sizeof(structbook),1,fp2);/*将还的书的原来状态设为无人借阅的*/
continue;
}
fwrite(&book[i],sizeof(structbook),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!
=0;i++)
{
fwrite(&book[i],sizeof(structbook),1,fp);/*将临时文件写回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w");/*清临时文件*/
fclose(fp2);
printf("overreturning!
pressanykeytoexit!
\n");
getch();
return;
}
}
printf("youhavenotborrowedthisbook,pressanykeytoexit!
\n");/*出错提示*/
fclose(fp);
getch();
return;
}
}
printf("ineffectivecard!
pieasecallthelibrarior!
\n");/*出错提示*/
fclose(fp);
getch();
}
lendcount()/*借书统计函数*/
{
FILE*fp;
inti,n=0;
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!
=0;i++)
{
printf("cardnum:
%dtheborrowedbook:
%s\n",student[i].carnum,student[i].lendbook);
n=n+1;
}
fclose(fp);
printf("therehavebeen%dbooksborrowed!
\n",n);
printf("pressanykey\n");
getch();
}
chabook()/*查找图书函数*/
{
charch5;
do
{clrscr();
printf("---------------welcometotushuchaxunsystem!
--------------\n");
printf("1:
\n");
printf("2:
\n");
printf("0:
\n");
printf("pleasepress0--2!
\n");
scanf("%s",&ch5);
switch(ch5)
{
case'1':
clrscr();findbook();getch();break;
case'2':
clrscr();findbook2();getch();break;
case'0':
break;
default:
printf("ineffectiveopartion\n");getch();break;
}
}while(ch5!
='0');
}
findbook()/*按书名查找函数*/
{
FILE*fp;
charbookname[10];
intture,i;
fp=fopen("book.txt","r");
printf("readthebooknameofyousearching\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(s