C课程设计.docx
《C课程设计.docx》由会员分享,可在线阅读,更多相关《C课程设计.docx(36页珍藏版)》请在冰豆网上搜索。
C课程设计
《C语言程序设计》课程设计
一、设计课题
下面提供多个设计课题,涉及面有大有小,难度有深有浅,考察的知识点、体现的设计目的也有所不同。
指导教师可根据大纲要求,同学们的学习兴趣、水平高低,指导学生选择适当的课题。
同学们也可自拟设计课题,但必须征得指导老师同意。
题目一:
工资管理系统
1、需求分析
工资信息存放在文件中,提供文件的输入、输出等操作;要实现浏览功能,提供显示、排序操作;而查询功能要求实现查找操作;另外还应该提供键盘式选择菜单以实现功能选择。
2、总体设计
整个系统可以分为信息输入、信息添加、信息浏览、信息排序、信息查询和信息统计模块。
3、详细设计
工资信息采用结构体数组:
StructSalary_Info
{
intCard_No;//工资卡号
Charname[20];//姓名
intmonth;//月份
floatInit_Salary;//应发工资
floatWater_Rate;//水费
floatElectric_Rate;//电费
floattax;//税金
floatFinal_Salary;//实发工资
}SI[MAX];//SI[MAX]中每个数组元素对应一个职工工资信息
(1)主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。
(2)输入模块
按照工资卡号、姓名、月份、应发工资、水费、电费的顺序输入信息,税金和实发工资根据输入的信息进行计算得到,这些信息被录入到文件中。
税金的计算:
if(应发工资<=800)
税金=0;
elseif(应发工资>800&&应发工资<=1400)
税金=(应发工资-800)*5%;
elseif(应发工资>1400)
税金=(应发工资-1400)*10%;
实发工资=应发工资-水费-电费-税金。
(3)添加模块
增加新的职工工资信息,从键盘输入并逐条写到原来的输入文件中,采用追加而不是覆盖的方式。
(4)浏览模块
分屏显示职工工资信息,可以指定10个1屏,按任意键显示下一屏。
通过菜单选择按照工资卡号还是姓名浏览。
如果按照卡号浏览,则显示的记录按照卡号升序输出;按照姓名浏览则按照字典序输出(调用排序模块的排序功能)。
(5)排序模块
排序模块提供菜单选择,实现按照工资卡号升序、实发工资降序以及姓名字典序排序。
排序方法可以选择冒泡排序、插入排序、选择排序等。
(6)查询模块
实现按照工资卡号和姓名的查询,采用基本的查找方法即可。
(7)统计模块
输入起止月份,按照职工卡号和月份查询记录,把起止月份之间的实发工资金额累加。
附加:
思考在数据输入及添加模块尾部添加排序功能,使得文件中的数据按照卡号排序。
这样在查询模块和统计模块可以采用二分查找以提高效率。
题目二:
校际运动会管理系统
1、需求分析
要记录比赛结果,可以查看参赛学校的信息和比赛项目信息,因而要实现文件的输入和输出功能;用户可以查询各个学校的比赛成绩,查看参赛学校信息和比赛项目信息等,因而要提供查找和显示功能;另外还应该提供键盘式选择菜单以实现功能选择。
2、总体设计
系统被设计为信息输入模块、比赛结果录入模块和查询模块三个模块。
3、详细设计
数据结构采用结构体数组,包括学校、项目、运动员三个结构体。
Structathlete
{
Charname[20];//姓名
Intage;//年龄
CharFrom[20];//来自学校
}Athlete;//运动员结构体
Structitem
{
Charname[20];//项目名
Int*weight;//在运行时根据用户的输入动态分配空间(各项目名次取法不同,weight所指空间依次存放第一名得分、第二名得分等)
Athlete*player;//指向获奖运动员信息的指针
}Item;//项目结构体
Structuniversity
{
Charname[20];//学校名
Item*item;//竞赛项目指针,根据用户输入动态分配空间
Intscore;//学校得分
}Uni;//学校结构体
ItemTotalItem[ItemNum];//项目结构体数组
UniAllUni[UniNum];//学校结构体数组
(1)主函数
提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。
(2)信息输入模块
输入参赛学校总数,M-男子参赛项目数,W-女子参赛项目数。
把参赛学校信息和项目信息以及运动员信息录入文件,建立三个文件。
例如第i个项目:
Scanf(“%s”,TotalItem[i].name);//输入项目名
Ch=Getchar();//通过输入1,2,3来选择项目名次取法
Switch(ch)
{
Case‘1’:
n=5;break;
Case‘2’:
n=3;break;
Case‘3’:
printf(“取前几名?
”,&n);break;
Default:
break;
}
TotalItem[i].weight=newint[n];
TotalItem[i].athlete=NULL;//指向获奖运动员信息,初始化为空
然后写入文件:
fp=fopen(“item.txt”,”wb”);
fwrite(&TotalItem[i],sizeof(Item),1,fp);
学校信息和运动员信息的录入与此类似。
(2)比赛结果录入模块
通过菜单选择进入比赛结果录入模块,更改TotalItem[i].athlete的值,并把获奖名单保存到项目文件中。
项目文件格式为:
项目名项目权值(按照第一名、第二名…给出权值)获奖运动员信息(按照第一名、第二名…给出)
(3)查找模块
查找学校信息文件,生成团体总分报表;用基本查找算法查询参赛学校信息(按照校名查找)或者比赛项目信息(按照项目名)。
题目三:
学生学籍信息管理系统设计
1、需求分析
学生基本信息、学生成绩基本信息要存入文件当中,因而要提供文件的输入输出操作;查询功能要求提供查找和显示操作;删除功能要求实现删除操作;排序功能要求实现排序操作;另外还应该提供键盘式选择菜单以实现功能选择。
2、总体设计
整个系统可以设计为数据录入模块、数据查询模块、数据删除模块和数据排序模块。
3、详细设计
设计学生基本信息和学生成绩基本信息结构体数组。
Struct
{
intstuNo;//学号
charname[20];//姓名
charsex[2];//性别
intdomNum;//宿舍号
inttel;//电话号码
}StuInfo;//学生基本信息结构体
Struct
{
intstuNo;//学号
charcourseNo;//课程编号
charcourseName;//课程名称
intcreditHour;//学分
InttriGrade;//平时成绩
IntexperiGrade;//实验成绩
IntexamGrade;//卷面成绩
FloattotalGrade;//综合成绩
FloatfinalCreHour;//实得学分
}StuGraInfo;//学生成绩基本信息结构体
(1)数据录入模块
学生基本信息文件可以在磁盘建立,采用写文件方式录入学生成绩基本信息。
综合成绩和实得学分通过计算得到。
(2)查询模块
通过菜单选择查询功能,再选择学生基本情况查询和成绩查询,若选择前者,再通过菜单选择学号、姓名或宿舍号码,按照基本查找算法查找A.TXT,然后把查找结果输出若选择后者,则先在A.TXT中查找学号对应的姓名,再在B.TXT中查找该学生的课程情况,并统计科目和实得总学分,输出结果。
(3)删除模块
通过菜单选择删除学生的功能,输入要删除学生的学号,则分别在A.TXT和B.TXT中查找该生信息,删除之;或者输入学生的姓名,先在A.TXT中得到该生的学号,删除该生信息,再在B.TXT中删除该学号对应的信息。
注意:
C语言中没有直接删除信息的函数,需要自己实现,可以采取读出数据,判断数据(如果不删除,则进入缓冲区,否则删除),写入数据(把缓冲区中的数据写入文件)的步骤进行。
(4)排序模块
通过菜单选择排序依据,采用排序算法(冒泡、插入、选择等)对数据进行排序并输出结果。
题目四:
通讯录管理系统
1、需求分析
信息记录要存放到文件中去,因而要实现文件的输入输出操作;要实现数据的插入、删除、修改和显示功能,因而要实现插入、删除、修改和显示操作;要实现按人名或电话号码进行查询的功能,因而要提供查找操作;另外还应该提供键盘式选择菜单以实现功能选择。
2、总体设计
整个系统可以设计为数据插入模块、数据修改模块、数据删除模块、数据显示模块和数据查询模块。
3、详细设计
采用结构体数组。
Struct
{
Charname[20];//人名
Charpost[20];//工作单位
Inttel;//电话号码
Charemail[20];//email地址
}TelInfo;//电话簿信息结构体
TelInfotelInfo[N];//电话簿信息结构体数组
(1)数据插入模块
输入数据,然后采用追加方式写文件。
(2)数据修改模块
通过菜单选择修改姓名、电话号码。
可以把要修改的姓名或电话号码存储在临时变量里面,然后读文件,找到要修改的记录,把该记录重新以新的值写入。
(3)数据删除模块
删除一条记录,则输入要删除的人名,然后读文件,把文件中读出来的记录的人名与待删除的人名比较,如果不匹配,则重新写入文件;否则舍弃不再写入文件。
(4)数据显示模块
读文件,输出结果。
(5)数据查询模块
用基本查找算法对电话簿实现按人名或电话号码的查询(读文件,把读出记录得相应字段与输入的查询字段比较),并把结果输出。
另外注意输出格式。
题目五:
学生选修课程管理系统
1、需求分析
系统以菜单方式工作,因而要提供键盘式选择菜单以实现功能选择;由于课程信息要用文件保存,因而要提供文件的输入输出操作;由于要浏览信息,所以要提供显示功能;要实现查询功能,故要提供查找操作。
2、总体设计
整个系统可以设计为信息输入模块、信息查询模块以及信息浏览模块。
3、详细设计
数据结构采用结构体,这里采用课程信息结构体和学生选课信息结构体。
Struct
{
CharcourseCode[10];//课程编号
CharcourseName[20];//课程名称
CharcourseType[10];//课程类别
InttotalPeriod;//总学时
IntclassPeriod;//授课学时
IntexperiPeriod;//上机学时
FloatcreditHour;//学分
Intterm;//开课学期
}CourseInfo[N];//课程信息结构体
Struct
{
IntstuNo;//学号;
CharcourseCode[10];//课程编号
}StuCourInfo[N];//学生选课信息结构体
(1)信息输入模块
从键盘输入课程信息和学生选课信息,写入文件。
(2)信息浏览模块
分屏显示课程信息,每屏10条课程记录,按任意键继续。
从文件中读数据,然后再显示。
(3)信息查询模块
通过菜单选择查询字段,可以按照课程编号、课程名称、课程性质、开课学期、学分对课程信息文件进行查找,查找算法可以选择基本查找、二分查找等算法。
可以通过菜单选择课程编号,在学生选课信息文件中查询该课程学生选修情况。
题目六:
飞机订票管理系统
1、需求分析
航班信息用文件保存,因而要提供文件的输入输出操作;航班信息浏览功能需要提供显示操作;要查询航线需要提供查找功能;另外要提供键盘式选择菜单以实现功能选择。
2、总体设计
该系统设计为航班信息输入模块、航班信息浏览模块和航线查询模块。
3、详细设计
数据结构采用结构体数组,设计航班结构体如下:
Struct
{
CharflightNo[10];//航班号
Charstart[10];//起始站
Charend[10];//终点站
Floatday;//飞行时间
InttotalTicket;//预售票总数
IntsellTicket;//已售票总数
}Flight[N];//航班结构体
(1)航班信息输入模块
采用fwrite或fprintf把航班信息写入航班信息文件。
(2)航班信息浏览模块
分屏显示航班信息,每屏10条记录,按任意键显示下一屏。
读文件然后显示即可。
(3)航线查询模块
通过菜单选择查询方式,提供按照航班号、起点站、终点站和飞行时间查询。
采用基本查找算法即可。
题目七:
职工信息管理系统
1、需求分析
系统要以菜单方式工作,因而要提供键盘式选择菜单以实现功能选择;职工信息采用文件保存,因而要提供文件的输入输出操作;要实现职工信息的浏览功能,则要提供信息显示操作;要实现职工信息查询功能,则要提供查找操作(按学历查询和按职工号查询两种查询方式);要实现职工信息删除、修改功能则要提供文件记录的删除、修改操作。
2、总体设计
整个系统被设计为职工信息输入模块、职工信息浏览模块、职工信息查询模块和职工信息删除与修改模块。
3、详细设计
数据结构采用结构体,设计职工信息结构体:
StructemployeeInfo
{
CharjobNo[10];//职工号
Charname[20];//姓名
Charsex;//性别
Intage;//年龄
ChareduLevel[10];//学历
Floatsalary;//工资
Charaddr;//地址
Chartel[11];//电话
}EmpInfo;//职工信息结构体
(1)职工信息输入模块
把职工信息写入航班信息文件。
(2)职工信息浏览模块
分屏显示职工信息,每屏10条记录,按任意键显示下一屏。
读文件然后显示即可。
(3)职工信息查询模块
通过菜单选择查询方式,提供按学历查询和按职工号查询两种查询方式。
采用基本查找算法即可。
(4)职工信息删除与修改模块
通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:
读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。
修改操作于删除操作类似,只是判断是否是要修改的记录,如果是,则把修改后的记录写入文件,否则直接写入文件。
题目八:
物资管理系统
根据要求,整个管理系统被设计为信息输入模块、信息查找模块、信息插入模块、领料模块和打印功能模块。
数据结构采用结构体,在题目要求中已给出,这里采用了链表,读者可以尝试把文件中的数据读入链表中,然后查找操作就是对链表的遍历。
也可以把structproduct*next;{结点指针}以及structl_pro*next;{结点指针}从结构体中去掉,采用结构体数组来做。
模块的分析如下:
(1)信息输入模块
把物资信息录入文件中。
(2)信息查找模块
用键盘菜单提示查找字段:
产品名称进货日期产品名称和库存量
按照产品名称查询,采用基本的查找算法查找物资库存文件记录的p_name字段,如果匹配则输出。
按照进货日期查询,则查找in_date字段。
提示输入查找日期,检查日期是否匹配,如果日期匹配,则输出。
按照产品名称和库存量查询,则提示输入产品名称和最小库存量,那么首先查找p_name字段,如果p_name字段匹配,再看real_s字段,如果<输入的最小库存,则输出其信息。
在查找过程中,如果没有找到相应的记录,则输出“notfound!
”。
(3)信息插入模块
信息插入模块所做的就是文件记录的添加操作,用追加的方式写入物资信息文件。
(4)领料模块
首先提示用户输入所要领的物资的名称或编号以及所领数量,然后查找物资库存信息文件,如果该物资存在且实际库存量满足,则允许领料,在领料文件中添加领料记录,并在物资库存文件中修改实际库存量。
(5)打印功能模块
通过键盘菜单选择打印领料单或者物资库存清单,显示结果。
主要是文件的读操作。
题目九:
图书管理系统
1、需求分析
图书管理信息采用文件保存,因而要提供文件的输入输出操作;要实现对图书基本信息的查询,则要提供查找操作(提供按书名、作者名查询两种查询方式)和显示操作;要实现对撤销图书信息的删除则要提供文件记录的删除操作;办理借书或还书手续需要提供修改操作;另外还要提供键盘式选择菜单以实现功能选择。
2、总体设计
整个系统被设计为数据输入模块、数据查询模块、数据删除模块和数据修改模块。
3、详细设计
数据结构采用结构体,设计图书信息结构体:
StructbookManageInfo
{
CharbookName[20];//图书名称
CharbookCode[20];//图书编号
Floatprice;//图书价格
Charauthor[10];//作者
Intstate;//存在状态,0代表可以出借,1代表已经借出
CharborrowerName[10];//借书人姓名
Intsex;//借书人性别,0代表女,1代表男
CharstuNo[10];//借书人学号
}bookMInfo;
(1)数据输入模块
采用fwrite或fprintf把图书基本信息写入图书信息文件。
(2)数据查询模块
通过菜单选择查询方式,提供按书名查询和按作者名查询两种查询方式。
采用基本查找算法即可。
(3)数据删除模块
通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:
读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。
(4)数据修改模块
办理借书手续时,先要在文件中查找要借的书的存在状态,若可以出借,则允许借出,把借书人姓名、性别和学号添加到该书的记录中,并把存在状态改为已经借出;否则,显示“抱歉,该书已借出”。
办理还书手续时,在文件中查找该书的记录,然后把存在状态改为允许出借,把借书人姓名、性别和学号删除。
具体修改操作可以参考删除操作。
题目十:
实验设备管理系统
1、需求分析
实验室设备信息用文件存储,故要提供文件的输入输出操作;要能够完成设备的录入和修改,需要提供设备添加和修改操作;实现对设备进行分类统计,需要提供排序操作;实现对设备的查询需要提供查找操作;另外还要提供键盘式选择菜单以实现功能选择。
2、总体设计
整个系统被设计为实验设备信息输入模块、实验设备信息添加模块、实验设备信息修改模块、实验设备分类统计模块和实验设备查询模块。
3、详细设计
数据结构采用结构体,设计实验设备信息结构体:
StructequipmentInfo
{
CharequipCode[10];//设备编号
CharequipType[20];//设备总类
CharequipName[20];//设备名称
floatequipPrice;//设备价格
charbuyDate[20];//设备购入日期
intscrap;//是否报废,0表示没有报废,1表示报废
charscrapDate[20];//报废日期
}EquInfo;
(1)实验设备信息输入模块
把实验设备基本信息写入实验设备信息文件。
(2)实验设备信息添加模块
添加设备时,把添加的设备基本信息采用追加的方式写入设备信息文件。
(3)实验设备信息修改模块
修改设备信息,则需要读文件,判断信息是否是要修改的设备的信息,如果是,修改,重新写入文件;否则直接重新写入文件。
(4)实验设备分类统计模块
根据给定的分类标准(设备种类、设备名、设备购入日期)对文件的记录进行排序,排序方法可以选择冒泡、插入、选择等方法。
然后采用查找算法查找同类设备,采用基本的数学运算即可统计同类设备的相关信息,比如数量、价钱等。
(5)实验设备查询模块
通过菜单选择查询方式,提供按设备编号、设备种类、设备名称、设备购入日期和设备状态为正常(scrap字段值为0)这些查询方式查询。
采用基本查找算法即可。
题目十一:
销售管理系统
某公司有四个销售员(编号:
1-4),负责销售五种产品(编号:
1-5)。
每个销售员都将当天出售的每种产品各写一张便条交上来。
每张便条包含内容:
1)销售员的代号
2)产品的代号
3)这种产品的当天的销售额
每位销售员每天可能上缴0-5张便条。
假设,收集到了上个月的所有便条,编写一个处理系统,读取上个月的销售情况(自己设定),进行如下处理。
1)计算上个月每个人每种产品的销售额。
2)按销售额对销售员进行排序,输出排序结果(销售员代号)
3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)
4)输出统计报表
销售统计报表
12345
1
2
3
4
每种产品之和总和
题目十二:
仪器仪表管理系统
1、需求分析
仪器仪表信息用文件存储,故要提供文件的输入输出操作;要能够完成对仪器仪表信息的修改和删除,需要对提供仪器仪表信息修改和删除操作;实现对仪器仪表信息的查询和统计及显示操作;另外还要提供键盘式选择菜单以实现功能选择。
2、总体设计
整个仪器仪表管理系统分为仪器表信息输入模块、仪器表信息修改和删除模块、仪器表信息查询和统计模块。
3、详细设计
数据结构采用结构体:
StructinstrumentInfo
{
CharinstrName[20];//仪器仪表名
CharinstrNo[10];//仪器仪表编号
CharbuyDate[20];//购买时间
CharborrowDate[20];//借入时间
CharlendDate[20];//借出时间
CharreturnDate[20];//归还时间
CharrepairDate[20];//维修时间
Intstate;//状态信息(0代表可借出,1代表已借出,2代表正在维修)
}InstrInfo;
(1)输入模块
把仪器仪表信息写入仪器仪表信息文件。
(2)修改和删除模块
通过菜单选择借出操作,查找文件仪器仪表信息,找到相应的仪器仪表,如果仪器仪表状态为0,则允许借出,在文件中更改仪器仪表状态为1,更改借出时间;否则,即仪器仪表借出或正在维修,则输出“抱歉,仪器仪表已借出(正在维修)!
”这个过程是一个对文件查找(读文件、判断是否是要查找的纪录)、重新写入的过程。
删除操作只需读文件,判断所读纪录是不是要删除的记录,如果是,则舍弃;否则重新写入文件。
(3)查询和统计模块
通过菜单选择查询或统计操作,若选择查询,则需要再选择查询方式:
基本信息、时间段、时间点。
基本信息查询,就分屏(每屏10条信息)显示所有记