计算机科学与技术、通信、自动化、电子信息技术等专业
一. 课程设计目的
本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。本课程设计的目的和任务:
1. 巩固和加深学生对C语言课程的基本知识的理解和掌握
2. 掌握C语言编程和程序调试的基本技能
3. 利用C语言进行基本的软件设计
4. 掌握书写程序设计说明文档的能力
5. 提高运用C语言解决实际问题的能力
二. 课程设计要求
1. 分析课程设计题目的要求
2. 写出程序流程图
3. 编写程序代码及重要的解释,调试程序使其能正确运行
4. 设计完成的软件要便于操作和使用
4. 设计完成后提交课程设计报告
三. 课程设计报告的内容
1. 课程设计名称、班级号、学号、学生姓名和课程设计起止日期
2. 课程设计目的和要求
3. 课程设计任务内容
4. 程序流程图
5.软件使用说明
6. 课程设计心得与体会
7. 附录1:参考文献
8. 程序清单(带有较详细的注释)请上传网络课堂。
四. 设计题目:
题1. 设计一个多功能计算程序(计算器模拟)
实现功能:
具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。依次输入第一个运算数、运算符(+,-,*,/)、第二个运算数,然后输出结果。结果可以作为下一个运算的第一运算数。按‘C’清屏,按‘R’退出。
例如:输入:2 +5
输出:7
题2. 洗牌和发牌模拟
用随机数开发一个可用来实现具体的玩牌游戏中的洗牌和发牌的模拟程序。
实现功能:
1)洗牌功能
2)发牌功能: 54张牌,随机发给4个玩家,要求显示各玩家及底牌.
3) 设计模拟4副牌的程序
题3. 学生成绩文件管理
现有3个班学生的C语言课程成绩,请以班级为单位对学生的成绩按从高到低的顺序排序,并将排序后的结果存入文件中。必须采用指针和函数。
提示:定义三个一维数组分别存放三个班的成绩,排序方法可以采用冒泡法或其它方法,在函数中实现数组的排序,在主函数中调用函数。
题4. 读一个文件把各记录读入链表各结点中;对链表进行添加\删除操作;把链表的每个结点元素存储在该文件中.
每个学生需完成,18周末时提交源程序与课程设计报告。
五、评分方法和标准
运行每个同学的程序、审阅课程设计报告,根据下面的标准给每位同学评定课程设计考试成绩。
1 程序调试成功(60%) 2 知识点运用得当(10%)
3 程序设计合理 (20%) 4. 课程报告撰写准确、无误(10%)
六、时间安排
C语言课程设计时间安排
17周
星期 | 一 | 二 | 三 | 四 | 五 |
上午 | 布置任务 答疑 | 答疑 | 答疑 | ||
下午 | 答疑 | 答疑 | 答疑 | 机房 | |
晚上 | 机房 | 机房 | 机房 |
星期 | 一 | 二 | 三 | 四 | 五 |
上午 | 机房 | 答疑 | 答疑 | 机房 | (交纸质设计报告,上传源程序于网络课堂) 答辩 |
下午 | 答疑 | 机房 | 机房 | ||
晚上 | 机房 |
1.答疑地点院办公楼405。上机地点院二楼机房。
2.上机要进行点名考勤。
3.自己没有PC机的学生,只要机房有空位置,17-18周可随时进机房用机。
4.答辩不合格者,设计延长到19周。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
附:报告封面的基本格式及报告主要内容如下:
课程名称: C语言程序设计
课程设计报告
专 业:
班 级:
学 号:
姓 名:
指导教师:
时间:2010/06/1
/////////////////////////////////////纸质报告格式////////////////////////////////////////////
封面
一、 课程设计目的和要求
二、设计内容
题一:XXXX
1.涉及的知识点
2.程序框图
3.关键函数代码
4.运行结果(贴图)
题二:XXXX
。。
三、设计中遇到的难点及解决办法
四、 课程设计心得与体会
////////////////////////////////////////////////////////////
(源程序上传网络课堂)
/////////////////////////////////////////////////////////////////////////////
选做题:图书管理系统
功能:
能够完成图书馆日常操作,数据要能够保存,能够随时取出,并在任何操作后都能保持信息完整性,具体内容如下:
●图书管理
✧添加图书
增加新的图书,同时需检查新书的图书编号是否在原图书当中存在,若是则应取消添加并提示重新输入。
✧查询图书
通过书编号查询图书信息。
✧修改图书
通过编号查询该图书,若找到则允许修改,否则提示无该图书信息。
✧删除图书资料
通过编号查询该图书,若找到则允许删除,否则提示无该图书信息。删除对象包括该图书资料以及“借还书登记”中的相关记录。
●图书借还
✧借书
1.判断所借书籍号是否存在,若不存在重新输入书籍号。
2.判断该借书证号是否存在,若不存在重新输入借书证号。
3.判断该书籍是否已借出,若是则不允许执行借书操作。
4.借书处理包括在“借还书登记”中增加该借书情况,在该图书信息中加上“已借”标记。
✧还书()
1.判断所借书是否存在,若不存在重新输入书籍。
2.判断该书是否已借出,若不是则不允许执行还书操作。
3.借书处理包括在“借还书登记”中增加该还书情况,在该图书信息中加上“未借”标记。
✧历史查询
可根据日期、书编号、查询所有符合的借还录。
●证件管理
✧添加读者
增加新读者,同时需检查该读者编号是否在所有借书证当中存在,若是则应取消添加并提示重新输入。
✧查询读者资料
通过借书证号查询读者信息。
✧修改读者资料
通过借书证号查询该读者,若找到则允许修改,否则提示无该读者资料。
✧删除读者资料
1.通过借书证号查询该读者,若找到则允许删除,否则提示无该读者资料。
2.通过借书证号查询该读者是否仍借有书籍,若有,则应归还书籍才可进行删除操作。
3.删除对象包括该读者资料以及“借还书登记”中的相关记录。
●系统帮助
✧关于此系统
显示本系统是用于学生C语言课程设计,功能简单,算法和处理方式可用于参考。
✧版本信息
显示开发者姓名、班级、开发完成日期、版本号和指导老师等信息。
●退出系统
退出程序。
基本数据结构:
●图书结构体
struct book
{
char num[4];/* 书编号*/
char name[20];/*书名*/
char pub_co[20]; /*出版社*/
char auther[10]; /*作者*/
float price;/*价格*/
char per_num[5];/借书证号*/
char borrow;/*借出否,1:借出;0:未借出*/
} ;
●读者结构体
struct cert
{
char per_num[5];/*借书证号*/
char name[20];/*姓名*/
char sex;/*性别,M表示男,G表示女*/
int age;/*年龄*/
};
●日期结构体
struct time
{
int year;/*年*/
int minth; /*月*/
int date; /*日*/
};
●借书情况结构体
struct card
{
char per_num[5];/*借书证号*/
struct time br_time;/*借还书日期*/
char event;/*借还书,其中1:表示借,0:表示还*/
char num[4];/*图书编号*/
};
●多个数据的组织形式
1.对于多本图书资料,可采用“图书结构体“数组来组织存放。
2.对于多个读者,可采用“读者结构体”数组来组织存放。
3.对于多条借还录,可采用“借书情况结构体”数组来组织存放。
数据流:
通过数据流,能够了解本系统所采用的数据及各操作所需的数据,以及图书管理业务的基本流程。如下图:
处理流程:
以下提供几个关键处理流程,希望同学们能够举一反三,完成其他处理流程的设计。
Main函数流程
添加图书流程
设计方法和技巧:
1.在主程序中首先以读写方式打开各数据文件文件,并将数据存放到各数组中,所有操作都在数组中进行,当要退出程序时,将该数组写回到文件中,并关闭文件。
2.为了便于判断数组元素的个数,可以仿造字符串的做法,在数组的最后添加一个元素,作为数组的结束标志,以后当读到该元素时,就作为数组的结束。
例如:
图书数组:选择图书编号结构体成员设为”AAAA”作为结束标志。
读者数组:选择借书证号结构体成员设为”AAAAA”作为结束标志。
借书情况数组:选择图书编号结构体成员设为”AAAA”作为结束标志。
3.所有存储数据的文件采用二进制文件,对文件的读写可以采用顺序文件的方式,并使用fread和fwrite函数。
4.设计的步骤:先设计主函数,各子函数只是简单的定义;当主函数调试正确后,再分别设计各子函数。(即所说的模块化设计方法)
5.添加数组元素算法:
找到具有结束标志的数组元素,将内容写入其中,在下一个数组元素添加结束标志。
6.删除数组中一个元素的算法:
算法1:采用一个临时数组,将除去该元素的其他数组复制到临时数组中,然后将临时数组复制到原数组中。
算法2:找到要删除的元素位置,然后由该元素开始,将后面的所有元素往前移动。
备注:以上方法和技巧只作为参考,若有更有效、简便的处理方式亦可采用。