HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY
C语言程序设计
课程设计指导书
张吴波 编
胡宁亚 审
电气与信息工程学院计算机系
20##年5月
一、设计目的
《C语言程序设计课程设计》的主要目的是培养学生在《C语言程序设计》课程学习后,综合运用《C语言程序设计》课程所学到的知识,编写C程序解决实际问题的能力,以及严谨的工作态度和良好的程序设计习惯。
通过本课程设计的训练,学生应该能够了解程序设计的基本开发过程,掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。能灵活应用,初步具备运用C解决实际问题的能力。
C语言课程设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C语言程序及编写设计报告等过程。
二、设计要求
(一)基本要求
1、掌握C 语言程序设计的方法,熟悉使用VC6.0作为开发软件开发C语言程序及C 程序的调试过程。
2、熟悉C 语言中的数据类型,数据结构、语句结构、运算方法、函数,巩固和加深对理论课中知识的理解,提高基本编程能力。
3、综合编程题,每组完成一个课题(一组不能超过2人),每组成员必须明确各自的任务。
4、要求利用结构化程序设计方法以及C的编程思想来完成题目问题描述中所要求的设计任务,功能模块化,设计内容符合题目要求;
5、数据组织使用数组、结构体、链表等均可;
6、概要设计模块划分合理,清晰,系统结构图符合功能操作要求;
7、详细设计,主要功能模块有较完善的程序流程图,每个主要功能模块有较完善的入口、功能、出口等的清晰的描述,说明符合结构化程序设计要求;
8、每个模块的程序代码,具有较好的可读性和可靠性;程序书写风格:锯齿型书写格式,并有尽可能详尽的序言性和功能型注释。
9、用户界面要求尽可能友好,提示信息充分、完整;对输入内容有较完善的判误处理并方便操作;
10、程序必须上机调试通过,不应出现语法型、功能型错误,并获得满意的结果;
11、所设计的程序,必须在提交验收前,通过测试用例做必要的功能测试,尽可能避免原则性错误的出现。
课程设计要求独立完成,严禁抄袭,如发现与他人雷同或与查新雷同,一经证实,相关人都按作弊处理,成绩为0分。
(二)设计步骤
在进行综合编程时需要遵循以下的步骤:
1、问题分析、确定解决方案框架,充分地分析和理解问题本身,弄清要求做什么。在确定解决方案框架过程中,仔细考虑如何使用数据,数据结构有哪些?程序结构清晰、合理、简单和易于调试,并确定每个模块的简单功能,以及模块之间的调用关系。
2、详细设计和编码:确定程序的主要流程,再此基础上进行代码设计,每个明确的功能模块程序一般不超过60行,否则要进一步划分。
3、上机前编写程序与检查。
4、上机调试程序。
5、每个功能在输入值集范围内,确定好几组测试用例数据,通过尽可能详尽的测试用例,找出程序中存在的或有可能出现的功能错误。
(三)综合报告要求
课程设计报告应包括下列主要内容:
1、需求分析:描述问题。简述课题要解决的问题是什么,有什么要求和限制条件;分析要求尽可能全面,观点要求正确;
2、总体设计:要求设计过程符合结构化程序设计方法的基本原则;有正确的程序组成框图;
3、详细设计:每个主要模块有流程图,并有模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等);
4、测试结果:清晰地描述每个主要功能通过几组测试用例数据进行测试后的结果,有否出现严重的功能型错误?如果有,问题是如何造成的,怎么修复的。
5、软件操作使用说明书:通过该说明书的操作使用说明,应能让使用人员清晰地知道,该软件有哪些主要功能,如何使用,输入有哪些要求,操作中需要注意什么问题等等;
6、该设计中存在的不足有哪些?有何改进设计的思路和方法,通过本次设计,有哪些建议和改进措施,你有哪些真实感受,希望今后怎么进行课程设计?
7、课程设计报告层次清楚,语言通顺;
8、附录;源程序清单和测试结果:源程序要有必要的注释。结果要包括测试数据和运行结果。从程序清单能看出具备基本的程序设计习惯。
9、课设报告严格按C语言课程设计报告样本要求书写及排版(单面)(只能采用Word2003格式)。
10、完成好的电子版课设报告,经指导教师当面验收合格后,即刻把报告及程序(单独上传)上传至:
http://clp.huat.edu.cn
未上传或上传的内容打不开,均按0分上报成绩。提请学生自己确认上传的内容是否符合要求。
三、时间安排
任务开始及完成时间:第18周1周,要求学生在《C语言程序设计》课程结束后即开始准备,最晚19周周1下午提交设计报告和程序。课设准备及18周期间,指导教师提供机动课设辅导。
计算机实验中心提供1周时间的课设上机时间。
四、设计内容
教师提供参考题目,要求学生在教师提供的的参考题目范围内选题。
设计题训练学生使用结构化方法决实际问题的能力,提高C语言的编程水平。总体要求学生学会使用链表或者结构体数组实现对问题中数据组织。程序结构采用结构化程序设计方法。main函数的编写应简洁、清晰;菜单显示、对数据的各个操作都用函数来实现。
程序的界面设计风格建议采用文字菜单的形式,例有一教师信息管理程序,其运行界面如下:
出现上述界面后,用户可以通过敲入‘0’、‘1’、‘2’、‘3’ 、‘4’、‘5’等字符完成所提示的功能。循环往复,直到敲入‘6’字符,退出系统。
输入教师信息时,应该提示用户输入教师信息;删除教师时,应该提示用户给出要删除教师记录的姓名;查找时,应该提示用户输入相应姓名等。
提示:在使用字符界面的菜单编程时,需要清屏,可以使用system(“cls”);函数将屏幕清屏。需要暂停,可以使用system(“pause”);暂停屏幕显示。需要清除前面的键盘缓冲区输入,可以使用rewind(stdin);函数。
本指导书提供的参考题目以及要求如下:
1.学生信息管理
问题描述:
已知程序要求管理的学生信息包括:学号,班级,姓名,年龄,性别,出生日期,地址,电话,E-mail等。设计一程序,完成以下功能:
1) 能从键盘输入学生的信息(增加,输入时需要能检查该学号的学生的记录是否已经存在,出生日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02))
2) 能从指定的文件中读入学生的信息
3) 能按学号查询学生的信息
4) 能按班级查询学生信息
5) 能删除指定学号的学生信息
6) 能将学生信息保存在指定的文件中
7) 所有数据符合实际应用要求
提示:
l 从文件读入学生信息时,需要先设计好文件的格式,从文件中读取数据后,按照预先设计的格式分析数据,提取学生的信息,读入程序
l 定义一个日期结构体保存日期,具体信息为:年、月、日
l 判断出生日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。
2.通讯录管理
问题描述:
已知程序要求通讯录的信息为:姓名、电话号码、类别、电子邮件,其中类别的类型有 :同事类、朋友类、商务类、一般类),设计一程序,完成以下功能:
1) 能从键盘输入通讯录的信息(增加,输入时需要能检查该姓名的通讯录的记录是否已经存在,如果存在,需要询问是否是覆盖还是增加,需要判断输入的类型是否存在)
2) 能从指定的文件中读入通讯录的信息
3) 能按姓名查询通讯录的信息
4) 能按分类查询通讯录的信息
5) 能删除指定姓名的通讯录的信息
6) 能将通讯录信息保存在指定的文件中
7) 所有数据符合实际应用要求
提示:
l 从文件读入学生信息时,需要先设计好文件的格式,从文件中读取数据后,按照预先设计的格式分析数据,提取学生的信息,读入程序
l 可以使用一个结构体数组保存类别,类别结构体包含的信息为:类别代号,类别名称。(如001,同事 则表示同事类),在输入通讯录信息时,只需要输入该类别对应的代号则可(查询类别数组中是否有该代号的记录),将该代号保存在通讯录信息中。显示时,根据代号在类别结构体数组中查询其类别名称显示。
3.酒店房间登记与计费管理
问题描述:
已知在酒店中有10个房间,每个房间的信息包括房间号,每天住宿价格,设计一程序,完成以下功能:
1) 从键盘输入客户的入住信息(包括:客户姓名,身份证号,开始入住时间、退房时间(假设客户入住时就确定什么时候退房)、入住房间号),需要完成以下功能:
l 入住房间号是否存在,开始入住时间,退房时间格式是否合法(格式为:YYYY-MM-DD,如20##-01-02)入住、退房时间必须用自动获取系统时间功能。
l 输入入住信息时需要完成以下校验:该房间是否当前已经入住,如果是提示用户不能入住,检查身份证号是否为15位或18位,如果不是则提示错误
l 输入入住信息时,需要根据入住时间和退房时间,自动计算入住天数(假设入住时间不会跨年),并根据相应房间的住宿价格,计算住宿费用
2) 根据房间号,查询住宿情况
3) 根据房间号和统计时间段(开始和结束时间,不跨年)统计房间产生的住宿费用
4) 所有数据符合实际应用要求
提示:
l 酒店中的10个房间,可以采用结构体数组实现,每个数组元素表示一个房间,房间的信息表示为:房间号,价格
l 定义一个日期结构体保存日期,具体信息为:年、月、日
l 定义一个链表表示客户的入住信息,结构体信息包括:客户姓名,身份证号,开始入住时间、退房时间,入住房间号,入住天数,入住价格、住宿费用(入住天数,入住价格、住宿费用的信息在输入入住信息时计算出来)
l 判断入住时间和退房时间的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。
l 计算入住天数,因为入住时间不会跨年,因此,可以根据月份和日期,计算入住时间到退房时间之间的天数。
l 判断房间是否当前已经入住需要查询入住信息链表,在该链表中是否存在退房时间比入住时间大的记录,如果有,则表示已经入住
l 统计时间段内房间产生的住宿费用时,需要根据开始统计的时间和结束统计时间查询入住信息链表,会有四种情况:1、查询记录的入住日期大于开始统计时间、退房日期小于结束统计时间,累加该记录的住宿费用;2、查询记录的入住日期小于开始统计时间,但退房日期大于开始统计时间,需要计算退房时间到开始统计时间的天数乘以价格再累加;3、查询记录的入住日期小于结束统计时间,但退房日期大于结束统计时间,需要计算入住时间到结束统计时间的天数乘以价格再累加;4、开始统计日期大于入住时间,结束统计日期小于退房时间,需要计算结束统计日期到开始统计日期的天数,乘以价格再累加。其余表示不在该统计时间段内,不产生入住费用
4.职工信息管理
问题描述:
已知职工信息包括职工号、姓名、性别、出生日期、学历、工资、住址、电话等。设计一程序,完成以下功能:
1) 能从键盘输入职工的信息(增加,输入时需要能检查该职工号的职工的记录是否已经存在,出生日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02)))
2) 能从指定的文件中读入职工的信息
3) 能按职工号查询职工的信息
4) 能按学历统计职工数
5) 能查询到指定年份需要退休的职工的信息(男:60岁,女55岁)
6) 能删除指定职工号的职工信息
7) 能将职工信息保存在指定的文件中
8) 所有数据符合实际应用要求
提示:
l 从文件读入职工信息时,需要先设计好文件的格式,从文件中读取数据后,按照预先设计的格式分析数据,提取职工的信息,读入程序
l 定义一个日期结构体保存日期,具体信息为:年、月、日
l 判断入出生日期格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。
l
l 可以使用一个结构体数组保存学历,学历结构体包含的信息为:学历代号,学历名称。(如001,本科 则表示本科学历),在输入职工信息时,只需要输入该学历对应的代号则可(查询学历数组中是否有该代号的记录),将该代号保存在职工信息中。显示时,根据代号在类别结构体数组中查询其学历名称显示。
5.销售管理
问题描述:
已知一公司某公司有4个销售员(编号、姓名、性别),负责销售5种产品(产品代号、产品名称,销售价格)。设计一程序,完成以下功能:
1) 从键盘输入销售信息:销售员编号、产品编号、销售日期、销售数量(输入时需要判断销售员编号是否存在、产品编号是否存在、销售数量是否大于0,销售日期日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02)))
2) 能输出指定时间段内的销售统计报表,格式如下:
销售统计报表
产品代号 销售之和
销售员代号 1 2 3 4 5
1
2
3
4
每种产品之和 总和
3) 根据销售员编号查询销售历史情况
4) 能删除指定销售员、产品、销售日期的记录
5) 所有数据符合实际应用要求
提示:
l 定义一个日期结构体保存日期,具体信息为:年、月、日
l 判断销售日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。
l 定义一个结构体数组保存4个销售员信息,具体信息为:编号、姓名、性别
l 定义一个结构体数组保存5种产品信息,具体信息为:产品代号、产品名称,销售价格
l 定义一个链表保存销售信息,信息为:销售员编号、产品编号、销售日期、销售数量。每输入一比销售信息时,在该链表中插入一条记录
l 输入销售信息时需要查询销售员数组和产品数组,是否在该销售员和产品
l 实现第二个功能(销售统计报表)时,需要定义一个二维数组report(5行6列)来保存报表信息,遍历销售链表,如果销售日期大于开始统计时间小于结束统计时间,判断其销售员代号在销售员数组中的下标m,以及产品代号在产品数组中的下标,并将该销售数量累加在report[m][n]元素中,再输入该二维数组
6.银行账户信息管理
问题描述:
已知一银行有5个客户(客户信息为:编号、客户姓名、客户地址、客户电话、账户总金额(最开始为0))。设计一程序,完成以下功能。存、取款时间必须通过调用系统时间获得。
1) 存款:输入客户编号、存款金额、存款日期,完成存款功能,需要判断客户编号是否存在,存款金额是否大于0,存款日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02))。
2) 取款:输入客户编号、存款金额、取款日期,完成取款功能,需要判断客户编号是否存在,取款金额是否大于0,取款金额是否小于客户的账户总金额,取款日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02))。
3) 查询指定客户的余额
4) 查询指定客户的存款记录
5) 查询指定客户的取款记录
6) 所有数据符合实际应用要求
提示:
l 定义一个日期结构体保存日期,具体信息为:年、月、日
l 判断存款日期和取款日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。
l 定义个长度为5的结构体数组保存客户信息,具体为:编号、客户姓名、客户地址、客户电话、账户总金额。最开始为账户总金额0。
l 定义一个链表保存客户的存、取款记录,具体信息为:编号、日期、操作类别、金额。可以设计操作类别为1表示存款,-1表示为取款,每次输入存款信息时,将存款金额累加到账户总金额,每次取款时,从账户总金额减去取款金额。
7.商品销售管理
问题描述:
已知一公司有10种产品(产品编号,产品名称,产品价格,产品产地,库存数量(最开始为1000个)),设计一程序,完成以下功能:
1) 销售:从键盘输入顾客姓名,销售数量、销售日期,实现销售功能。需要判断产品是否存在,销售数量是否小于库存数量,销售日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02))销售时间必须通过调用系统时间获得。
2) 能根据产品编号查询产品的销售历史
3) 计算时间段内各个产品的销售总额
4) 能根据顾客姓名,查询购买历史
5) 能显示所有顾客的姓名
6) 所有数据符合实际应用要求
提示:
l 定义一个日期结构体保存日期,具体信息为:年、月、日
l 判断存款日期和取款日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。
l 定义一个结构体数组保存10种产品信息,具体信息为:产品编号,产品名称,产品价格,产品产地,库存数量(最开始为1000个)
l 定义一个链表,保存销售信息,具体为:顾客代码,销售数量、销售日期。
l 定义一个链表保存顾客信息,具体为:顾客代码,顾客姓名
l 当输入销售信息时查询顾客链表,如果在链表中存在该姓名的顾客记录,则将其代码在该销售链表中插入一条记录,如果不存在,则在顾客链表中插入一条记录,(顾客代码需要自动生成)。
8.设备管理
问题描述:
已知一公司需要使用10种设备(设备编号、设备名称),4个部门(部门编号、部门名称),该四个部门需要其他供应商购买使用设备,设计一程序,,完成以下功能:
1) 购买:输入设备编号、部门编号(购买),购买日期、设备数量,完成购买的功能:需要判断设备编号、部门编号是否存在,设备数量是否大于0,购买日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02))购买时间必须通过调用系统时间获得。
2) 报废:输入设备编号、部门编号(报废),报废日期、设备数量,完成报废功能:需要判断设备编号、部门编号是否存在,设备数量是否大于0小于该部门当前正使用设备数量。报废日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02))
3) 查询指定设备编号购买历史
4) 指定部门报废设备的历史
5) 统计指定日期公司各设备可以使用的数量
6) 所有数据符合实际应用要求
提示:
l 定义一个日期结构体保存日期,具体信息为:年、月、日
l 判断购买(报废)日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。
l 定义一个结构体数组保存10种设备的信息,具体为:设备编号,设备名称
l 定义一个结构体数组保存4个部门的信息,具体为部门编号、部门名称
l 定义一个链表保存购买(报废)信息,具体为设备编号、部门编号、购买(报废)日期、操作类型、设备数量、购买单价、购买金额。其中操作类型为1 表示购买、-1表示报废。
l 输入购买信息时,查询设备数组和部门数组,是否设备编号和部门编号存在,如果存在,根据购买数量和购买单价计算购买金额,找出设备的插入购买(报废)链表(操作类型为1)。
l 输入报废信息时,查询购买(报废)链表,计算在报废日期之前购买的设备数量(操作类型为1的),计算在报废日期之前报废的设备数量,得到当前在使用的设备数量,如果输入的报废数量小于当前在使用的设备数量则插入入购买(报废)链表(操作类型为-1)。
l 统计在指定日期,查询购买(报废)链表,计算各个部门在统计日期之前购买的设备数量(操作类型为1的),计算各个部门在统计日期之前报废的设备数量,可以使用一个数组保存这些数据信息,打印形成报表。
9.飞机订票
问题描述:
某公司每天有10航班(航班号、价格),每个航班的飞机,共有80个坐位,分20排,每排4个位子。编号为A,B,C,D。如座位号:10D表示10排D座。设计一程序,完成以下功能:
1) 订票:输入乘客的姓名、身份证号、航班号、乘坐日期,座位号,完成订票功能(一次只能预定一张机票)。需要判断航班号是否存在,身份证号的长度是否为15位或18位,判断座位号是否为航班上正确的座位号,座位号是否已经被其他顾客预定,乘坐日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02)))订票时间必须通过调用系统时间获得。
2) 退票:输入乘客的姓名、航班号、日期,完成退票功能。需要判断该乘客是否已经订购了该日期的该航班)(不考虑航班飞机是否已经起飞,认为任何时候都可以退票)
3) 查询指定航班、指定日期的乘客信息
4) 查询指定航班的飞机票的销售额
5) 查询指定身份证号的顾客的乘坐飞机历史。
6) 所有数据符合实际应用要求
提示:
l 定义一个日期结构体保存日期,具体信息为:年、月、日
l 判断乘坐日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。
l 定义一个结构体数组保存航班信息,具体为:航班号、价格
l 定义一个结构体保存座位号,具体为:排,座
l 定义一个订票链表,保存订票信息,具体为:乘客的姓名、身份证号、航班号、乘坐日期,座位号。输入时,判断排号是否大于0 小于等于20 ,座号是否为A、B、C、D, 同时需要查询订票链表,是否存在相同乘坐日期、相同航班、相同座位号的记录,如果有则表示已经预定,如果没有则插入订票链表
l 退票时,需要从输入身份证号、航班号、乘坐日期,查询订票链表,如果在该记录,则删除,
10.仓库管理
问题描述:
已知一工厂有5个仓库(仓库编号、仓库名称、负责人),用于保存公司生产的10个产品(产品编号、产品名称、产品规格),任何一种产品可以保存在该5个仓库中,编写一程序完成以下功能:
1) 产品入库:从键盘输入仓库编号、产品编号,入库日期,入库数量。需要判断仓库编号是否存在、产品编号是否存在、入库日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02),入库数量是否大于0,入库日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02))
2) 产品出库:从键盘输入仓库编号、产品编号、出库日期,出库数量,需要判断仓库编号是否存在、产品编号是否存在、入库日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02),入库数量是否大于0,是否小于当前该仓库的库存量,出库日期格式是否合法(格式为:YYYY-MM-DD,如20##-01-02))出入库时间必须通过调用系统时间获得。
3) 查询指定仓库编号的入库记录
4) 查询指定产品编号的入库记录
5) 查询指定仓库编号的出库记录
6) 查询指定产品编号的出库记录
7) 所有数据符合实际应用要求
提示:
l 定义一个日期结构体保存日期,具体信息为:年、月、日
l 判断入库日期和出库日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。
l 定义一个结构体数组,保存5个仓库信息,具体为:仓库编号、仓库名称、负责人
l 定义一个结构体数组,保存10个产品信息,具体为:产品编号、产品名称、产品规格。
l 定义一个产品出库(入库)链表,保存产品的出库(入库)信息。具体为:仓库编号、产品编号,入库日期,入库数量,操作类型(为1 表示入库,为-1表示出库)
l 产品入库时,需要查询仓库数组和产品数组,如果产品编号和仓库编号存在,则插入产品出库(入库)链表
l 产品出库时,需要查询产品出库(入库)链表,查询产品编号、仓库编号的入库记录得到入库的数量(类型为1),查询产品编号、仓库编号的出库记录得到出库的数量(类型为-1),计算得到该产品在该仓库的库存量,如果出库数量小于库存量,插入产品出库(入库)链表,类型为-1。
11.学校运动会管理
问题描述:
已知某学校运动会上有5个系部(编号、名称)和10个运动项目,各项目名次取法有如下几种:
取前5名:第1名得分 7,第2名得分 5,第3名得分3,第4名得分2,第5名得分 1; 编写一程序,完成以下功能:
1) 从键盘输入系部编号、运动员姓名、运动项目编号、获取名次。需要判断系部编号是否存在、参赛项目是否存在、获取名次是否合法,同一系部的同一个人,不能在同一个项目中出现两次。
2) 按照比赛成绩从高到底输出系部和其比赛成绩
3) 查询指定系部编号的获奖记录
4) 查询指定运动项目的获奖记录
5) 所有数据符合实际应用要求
提示:
l 定义一个结构体数组,保存5个系部的信息,具体为:编号、名称,比赛成绩(最开始为0)
l 定义一个结构体数组,保存10个运动项目的信息,具体为:编号、名称
l 定义一个获奖链表,保存运动员的获奖信息,具体为:系部编号、运动员姓名、运动项目编号、获取名次,得分,查询系部数组和运动项目数组,如果存在,查询获奖链表,是否存在该系部、该姓名、该项目的记录,如果不存在,根据获取的名次,计算获奖的得分,插入获奖链表,并将得分累加到系部的比赛成绩。
l 对系部数组按照比赛成绩排序
12.教师工作量管理
问题描述:
已知一学校有4们课程(课程编号、课程名称,课时),5个教师(教师号、姓名、性别、职称),在计算教师工作量时,其计算方法如下表:
班级数目 单个教学任务总课时
2 1.5*(理论课时+实验课时)
3 2*(理论课时+实验课时)
>=4 2.5*(理论课时+实验课时)
编写一程序,完成以下功能:
1) 输入教师的授课信息:教师号、班级数量,任课时间(20##-1表示20##年第一学期),班级数量。
2) 查询指定年份的各个教师的工作量
3) 查询指定教师编号、指定年份的工作量
4) 查询指定教师编号、指定年份的授课信息
5) 查询指定课程编号、指定年份的授课教师信息
6) 所有数据符合实际应用要求
提示:
l 判断任课时间的格式是否合法时,需要判断长度是否为6,第5位为字符’-’。
l 定义一个结构体数组,保存4门课程的信息
l 定义一个结构体数组,保存5个教师的信息
l 定义一个授课信息链表,保存教师的授课信息,具体为:教师号、班级数量,任课时间(20##-1表示20##年第一学期),班级数量,工作量
l 输入授课信息时,查询课程数组、教师数组,是否课程和教师存在,根据算法计算该课程的工作量,如果存在则插入授课信息链表。
l 查询教师工作量时,输入一个年份,查询授课信息链表中任课时间前4位等于该年份的记录,累加到教师工作量。
13.学生证管理程序
题目描述
设计一学生证的管理程序。该程序应具有下列功能:
(1) 录入某位学生的学生证信息(学生证应该具有的信息请参看自己的学生证);
(2) 给定学号,显示某位学生的学生证信息;
(3) 给定某个班级的班号,显示该班所有学生的学生证信息;
(4) 给定某位学生的学号,可以修改该学生的的学生证信息;
(5) 给定某位学生的学号,可以删除该学生的学生证信息;
(6) 提供一些针对各类信息的统计功能,如相同地区,相同班号、相同系别、相同性别,相同生日段的学生人数;
题目要求
(1) 按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。
(2) 学生证应该包含的信息请参看自己的学生证。
(3) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4) 每个功能操作中,不应有原则性的错误出现;
(5) 对输入值用测试用例测试,不应有错误出现;
(6) 界面应友好,操作应流畅。
(7) 所有数据符合实际应用要求
输入要求
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。
输出要求
(1) 应用程序运行后,要在屏幕上显示一个菜单。
(2) 要求用户输入数据时,要给出清晰、明确的的提示信息,包括输入的数据内容、格式及结束方式等。
提示`
设计一个结构体类型和一维数组类型,用来保存学生证的内容。
扩展功能
将所有学生证信息存储在一个文件中,并实现文件读写的操作。
14.学分管理程序
题目描述
请设计一个学生的学分管里程序
假定每位学生必须完成基础课50学分、专业课50学分、选修课24学分、人文类课程8学分和实验性课程20学分才能够毕业。因此在管理学分时,要考虑每个学分所属于的课程类别。
该程序应该具有下列功能:
(1) 录入某位学生的学分;
(2) 给定学号,显示某位学生的学分完成情况;
(3) 给定某个班级的班号,显示该班所有学生的学分完成情况;
(4) 给定某位学生的学号,修改该学生的学分信息;
(5) 按照某类课程的学分高低进行排序;
(6) 提供一些统计各类信息的功能,如:按个人、班,按课程类别、统计当前学分完成情况
(7) 所有数据符合实际应用要求
题目要求
(1) 按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。
(2) 学分信息应该包括学号、姓名、课程类别和学分等。
(3) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4) 每个功能操作中,不应有原则性的错误出现;
(5) 对输入值用测试用例测试,不应有错误出现;
(6) 界面应友好,操作应流畅。
输入要求
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。
输出要求
(1) 应用程序运行后,要在屏幕上显示一个菜单。
(2) 要求用户输入数据时,要给出清晰、明确的的提示信息,包括输入的数据内容、格式及结束方式等。
提示`
设计一个结构体类型和一维数组类型,用来保存学分信息。
扩展功能
将所有学生的学分信息存储在一个文件中,并实现文件读写的操作。
15.图书登记管理程序
题目描述
请设计一个图书登记管理程序。该程序应该具有下列功能:
(1) 录入某本图书的信息;
(2) 给定图书号,显示某本图书信息;
(3) 给定某个关键字,显示所有书名中包含该关键字的图书信息;
(4) 给定出版社,显示该出版社的所有图书信息;
(5) 删除某本图书的信息;
(6) 提供一些统计各类信息的功能;如:按登记日期、出版社、价格、类别统计现有图书情况;
题目要求
(1) 按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。
(2) 图书信息应该包括书号、书名、出版社、类别和价格等。
(3) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4) 每个功能操作中,不应有原则性的错误出现;
(5) 对输入值用测试用例测试,不应有错误出现;
(6) 界面应友好,操作应流畅。
(7) 所有数据符合实际应用要求
输入要求
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。
输出要求
(1) 应用程序运行后,要在屏幕上显示一个菜单。
(2) 要求用户输入数据时,要给出清晰、明确的的提示信息,包括输入的数据内容、格式及结束方式等。
提示`
设计一个结构体类型和一维数组类型,用来保存图书信息。
扩展功能
将所有图书信息存储在一个文件中,并实现文件读写的操作。
16.学生作业完成情况管理程序
题目描述
请设计一个学生作业完成情况管理程序。
假设某门课程一学期要留10次作业,每次老师要进行批改,给出分数后还要进行登记。
学期期末要根据每次作业的成绩计算出最终的平时成绩(满分100分)。
该程序应该具有下列功能:
(1) 录入某位学生某次作业的分数;
(2) 给定学号,显示显示某位学生的作业完成情况;
(3) 给定某个班的班号,显示该班所有学生的作业完成情况;
(4) 给定某位学生的学号,修改该学生的作业完成情况信息;
(5) 给定某位学生的学号,删除该学生的信息;
(6) 提供一些针对各类信息的统计功能;如:当前某班的作业完成情况(平均值、前三名、后三名);
(7) 所有数据符合实际应用要求
题目要求
(1) 按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。
(2) 作业登记信息应该包括学号、姓名和10次作业完成情况等。
(3) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4) 每个功能操作中,不应有原则性的错误出现;
(5) 对输入值用测试用例测试,不应有错误出现;
(6) 界面应友好,操作应流畅。
输入要求
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。
输出要求
(1) 应用程序运行后,要在屏幕上显示一个菜单。
(2) 要求用户输入数据时,要给出清晰、明确的的提示信息,包括输入的数据内容、格式及结束方式等。
提示`
设计一个结构体类型和一维数组类型,用来保存作业登记信息。
扩展功能
将所有作业登记信息存储在一个文件中,并实现文件读写的操作。
17.停车场管理系统设计:
题目描述
假定学院1号停车场有车位20个,车位满时,能入不能进,要求记录每台车辆的车牌号,出入时间(要求自动获取系统时间),停车收费管理为: 0.5小时内免费,以后每1小时收费1元,超过6小时的按2元计费,超过24小时的按3元计费,车辆入场时,告知空闲车位情况,并显示收费标准;车辆出场时统计总费用并显示。
试设计一停车场管理系统,使之能提供以下功能:
(1) 系统以菜单方式工作(用键盘输入1~6之间的数来选择功能,其中6为退出)
(2) 车辆进入停车场录入功能(车牌号、进入时间(自动获取系统时间)、车位满时不能进入;
(3) 停车场停车信息总体浏览功能(车位占用情况、空闲车位情况、已在车场内的车辆车牌号,当前已在车场的单台停车费用总计及停车场当前收费总计)
(4) 查询功能,按车位空闲情况、停车时时长查询(至少一种查询方式)
(5) 车辆出场后信息的删除(按车牌号进行删除,同时删除该车的所有费用)
(6) 收费的修改(给定密码,按费用性质修改,如改变收费时长或增加降低时长内费用)
(7) 所有数据符合实际应用要求
题目要求
(1) 按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。
(2) 停车场信息应该包括车位、车牌号和收费标准等。
(3) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4) 每个功能操作中,不应有原则性的错误出现;
(5) 对输入值用测试用例测试,不应有错误出现;
(6) 界面应友好,操作应流畅。
输入要求
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。
输出要求
(1) 应用程序运行后,要在屏幕上显示一个菜单。
(2) 要求用户输入数据时,要给出清晰、明确的的提示信息,包括输入的数据内容、格式及结束方式等。
提示`
设计一个结构体类型和一维数组类型,用来存放车场信息。
扩展功能
将所有车场信息存储在一个文件中,并实现文件读写的操作。
18. 考勤管理系统
题目描述
假定公司有职工10人,职工有职工号、姓名、以周为记录时长的考勤情况(迟到次数、早退次数、旷工天数)三项记录,一周上班五天,每天上午上班时间为8:00,下班时间为11:30、下午2:00上班,5:30下班。
试设计一考勤管理系统,使之能提供以下功能:
(1) 系统以菜单方式工作(用键盘输入1~5之间的数来选择功能,其中6为退出)
(2) 职工上班、下班录入功能(职工号、姓名任意给一个即可,上班时间(自动获取系统时间)、下班时间(自动获取系统时间))
(3) 职工出勤情况整体浏览功能(职工号、姓名、(迟到、早退、旷工)、无前项则显示全勤)
(4) 查询功能,按职工号、姓名、迟到、早退、旷工、全勤查询(至少一种查询方式)
(5) 职工考勤信息的删除(给定密码后可按职工号、姓名、考勤情况任一项进行删除)
(6) 考勤信息的修改(给定密码后可按职工号、姓名、考勤情况任一项进行删除)
(7) 所有数据符合实际应用要求
题目要求
(1) 按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。
(2) 考勤信息应该包括:职工号、姓名、上班时间、下班时间(迟到、早退、旷工)等。
(3) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4) 每个功能操作中,不应有原则性的错误出现;
(5) 对输入值用测试用例测试,不应有错误出现;
(6) 界面应友好,操作应流畅。
输入要求
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。
输出要求
(1) 应用程序运行后,要在屏幕上显示一个菜单。
(2) 要求用户输入数据时,要给出清晰、明确的的提示信息,包括输入的数据内容、格式及结束方式等。
提示`
设计一个结构体类型和一维数组类型,用来存放考勤信息。
扩展功能
将所有考勤信息存储在一个文件中,并实现文件读写的操作。
19.图书租借管理系统
题目描述
图书租借信息包括:书号、书名、作者名、存在状态(每本书名有10本书,还剩几本)、借书人姓名、性别、学号等。租借收费管理为:两天内免费,以后每增加1天收费0.5元,超过6天按1元计费,超过30天的按2元计费,借阅登录时,告知该书存在情况,并显示收费标准;还书时统计总费用并显示。
试设计一图书租借管理系统,使之能提供以下功能:
(1) 系统以菜单方式工作(用键盘输入1~6之间的数来选择功能,其中6为退出)
(2) 图书信息录入功能(含本数,图书信息用文件保存)
(3) 图书信息整体浏览功能(包括书号、书名、作者名、存在状态)
(4) 查询功能:按书号、书名、按作者名、安存在状况查询(至少一种查询方式)
(5) 图书的借阅功能:借书时显示存在状态及收费标准,为0的不能借阅
(6) 图书的还书功能:还书时显示费用状况及收费标准,并修改存在状态。
(7) 图书信息的删除(按书号或书名进行删除,未还的图书信息不能删除)
(8) 所有数据符合实际应用要求
题目要求
(1) 按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。
(2) 图书租借信息应该包括:书号、书名、作者名、存在状态、借书人姓名、性别、学号等。
(3) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4) 每个功能操作中,不应有原则性的错误出现;
(5) 对输入值用测试用例测试,不应有错误出现;
(6) 界面应友好,操作应流畅。
输入要求
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。
输出要求
(1) 应用程序运行后,要在屏幕上显示一个菜单。
(2) 要求用户输入数据时,要给出清晰、明确的的提示信息,包括输入的数据内容、格式及结束方式等。
提示`
设计一个结构体类型和一维数组类型,用来存放租借信息。
扩展功能
将所有租借信息存储在一个文件中,并实现文件读写的操作。
20.图书销售管理系统
题目描述
图书租借信息包括:书号、书名、作者名、书价、存在状态(每个书名有5本书)、销售价格为:总费用在50元以内,95折收费,超过100元按90折收费,超过200元按80折收费,超过300元,按75折收费,超过500元以上,一律按70折收费,售书时,显示该书存在情况,并显示收费标准及总费。
试设计一图书销售管理系统,使之能提供以下功能:
(1) 系统以菜单方式工作(用键盘输入1~6之间的数来选择功能,其中6为退出)
(2) 图书信息录入功能(图书信息用文件保存)
(3) 图书信息整体浏览功能(包括书号、书名、作者名、书价、存在状态)
(4) 查询功能:按书号、书名、作者名状况查询(至少一种查询方式)
(5) 图书的销售功能:售书时显示存在状态及收费标准,为0的不能销售
(6) 图书信息的删除(给定密码,按书号、书名或作者进行删除,未销售完的图书信息不能删除)
(7) 所有数据符合实际应用要求
题目要求
(1) 按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。
(2) 图书销售信息应该包括:书号、书名、作者名、书价、存在状态等。
(3) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4) 每个功能操作中,不应有原则性的错误出现;
(5) 对输入值用测试用例测试,不应有错误出现;
(6) 界面应友好,操作应流畅。
输入要求
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。
输出要求
(1) 应用程序运行后,要在屏幕上显示一个菜单。
(2) 要求用户输入数据时,要给出清晰、明确的的提示信息,包括输入的数据内容、格式及结束方式等。
提示`
设计一个结构体类型和一维数组类型,用来存放图书信息。
扩展功能
将所有图书信息存储在一个文件中,并实现文件读写的操作。
21.宿舍管理系统
题目描述
现有学生宿舍一栋,共6层,每层有房间12个,每间宿舍可以住6名学生,每层一半为为含卫生间宿舍,含卫生间的每年收费为1200元,其它为800元。
试设计一宿舍管理系统,使之能提供以下功能:
(1) 系统以菜单方式工作(用键盘输入1~6之间的数来选择功能,其中6为退出)
(2) 学生住宿信息录入功能(录入信息用文件保存);
(3) 宿舍信息整体浏览功能(包括各房间入住学生情况、房间空闲情况)
(4) 查询功能:按层、房间、收费标准、入住时间查询(至少2种查询方式)
(5) 宿舍入住修改功能:入住时时显示空闲状态及收费标准,为0的不能入住;
(6) 学生入住信息的删除功能(给定密码,按学号、姓名、房间、床位进行删除,未未缴清住宿费的不能删除)。
(7) 所有数据符合实际应用要求
题目要求
(1) 按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。
(2) 住宿信息应该包括:层号、房间号、床位号、学号、姓名、收费标准、缴费状态、入住时间等。
(3) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4) 每个功能操作中,不应有原则性的错误出现;
(5) 对输入值用测试用例测试,不应有错误出现;
(6) 界面应友好,操作应流畅。
输入要求
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。
输出要求
(1) 应用程序运行后,要在屏幕上显示一个菜单。
(2) 要求用户输入数据时,要给出清晰、明确的的提示信息,包括输入的数据内容、格式及结束方式等。
提示`
设计一个结构体类型和一维数组类型,用来存放入住信息。
扩展功能
将所有入住信息存储在一个文件中,并实现文件读写的操作。
22.车票管理系统
题目描述
一车站每天有n个发车班次,每个班次都有一班次号(1、2、3…n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。如
班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数
1 8:00 十堰 丹江 3 45 30
2 6:30 十堰 郧县 1 40 40
3 7:00 十堰 郧西 4 40 20
4 10:00 十堰 竹山 3 40 2
试设计车票管理系统,使之能提供以下功能:
(1) 录入班次信息(信息用文件保存),可不定时地增加班次数据
(2) 浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
(3) 查询路线:可按班次号查询 ,可按终点站查询
(4) 售票和退票功能
A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数;
B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数;
(5) 所有数据符合实际应用要求
题目要求
(1) 按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。
(2) 班次信息应该包括:班次、发车时间、起点站、终点站、行车时间、额定载量、已定票人数等。
(3) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4) 每个功能操作中,不应有原则性的错误出现;
(5) 对输入值用测试用例测试,不应有错误出现;
(6) 界面应友好,操作应流畅。
输入要求
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。
输出要求
(1) 应用程序运行后,要在屏幕上显示一个菜单。
(2) 要求用户输入数据时,要给出清晰、明确的的提示信息,包括输入的数据内容、格式及结束方式等。
提示`
设计一个结构体类型和一维数组类型,用来存放班次信息。
扩展功能
将所有班次信息存储在一个文件中,并实现文件读写的操作。
五、课程考核
考核采用教师查验学生编写的程序及课程设计报告文档,以答辩的形式进行,形成答辩记录并存档,考核学生需求分析、总体设计、详细设计、规范化程序设计实训,以及程序测试、分析等方面完成情况,考核比重如下:
1、程序设计内容 25%
2、综合设计报告 25%
3、平时成绩 10%
4、答辩 40%
程序设计内容评分细则
综合设计报告评分细则
答辩评分细则
六、主要参考文献
1. 《C程序设计案例教程》廖湖声著,人民邮电出版社。
2.《C程序设计》谭浩强著,清华大学出版社。
3.《C语言程序设计教程》,杨路明著,北京邮电大学出版社。