notice用于保存printf()中输出的提示信息。
5)locate()
函数原型:
intlocate(TELEBOOKtemp[],intn,charfindmess[],charnameorphonenum[])
功能:
locate()函数用于单位数组中符合要求的元素,并返回该数组元素的下标值。
参数findmess[]保存要查找的家庭信息,nameorphonenum[]表示按姓名或电话号码字段在数组temp中查找。
6)add()
函数原型:
intadd(TELEBOOKtemp[],intn)
功能:
add()函数用于在数组temp中增加电话簿记录,并返回数组中的当前记录数。
7)qur()
函数原型:
voidqur(TELEBOOKtemp[],intn)
功能:
qur()函数用于在数组temp中按姓名或电话号码查找满足条件的记录,并显示出来。
8)del()
函数原型:
intdel(TELEBOOKtemp[],intn)
功能:
del()函数用于在数组temp中找到满足条件的记录,然后删除该记录。
9)modify()
函数原型:
voidmodify(TELEBOOKtemp[],intn)
功能:
modify()函数用于在数组temp中修改记录。
10)insert()
函数原型:
intinsert(TELEBOOKtemp[],intn)
功能:
insert()函数用于在数组temp中插入记录,并返回数组中的当前记录数。
11)selectsort()
函数原型:
voidselectsort(TELEBOOKtemp[],intn)
功能:
selectsort()函数利用选择排序算法在数组temp中完成数组的升序排序。
12)save()
函数原型:
voidsave(TELEBOOKtemp[],intn)
功能:
save()函数将电话薄数组temp中的n个元素写入磁盘数据文件中。
课程设计二、电子投票系统
功能需求描述如下:
分投票人模块和管理员模块两部分
1、投票人主要功能模块
(1)投票人的投票方式:
在系统提示符下输入要选举的候选人编号,即可完成投票。
(2)投票人了解候选人的方式:
浏览候选人列表、输入序号查询候选人介绍。
2、管理员模块的主要功能
(1)初始化候选人信息:
在系统投入使用前先将需要投票选举的候选人信息录入系统中,以便投票和查看。
即将候选人的序号、姓名和简介等录入系统。
(2)浏览候选人简介:
管理员有权浏览候选人简介,浏览的顺序按照候选人序号进行。
(3)修改候选人简介:
当候选人信息有变化时,输入候选人序号对其信息进行修改。
(4)查询投票情况:
管理员有权查询当前各个候选人得票情况,以便得出最终被选出的候选人信息。
(5)清除投票信息:
当投票工作结束后,管理员选择清除投票信息,即清除系统中所有候选人的票数,使之归零。
(6)安全管理:
管理员可以对投票人进行管理,投票人只有用管理员规定的用户名和密码才能进入系统进行投票。
管理员还可以更改用户名、密码和权限,并对投票人信息进行增加、删除、查询、排序和初始化等操作。
课程设计三、家庭财务管理系统
家庭财务管理系统是为用户进行家庭成员的收支构成及信息管理的应用软件。
功能描述如下:
(1)用户登录:
系统根据家庭成员的用户名和密码登录后,根据权限判断该家庭成员是家长还是普通成员,不同成员可以使用不同的功能。
普通成员的用户只有浏览权限而不能进行实质性改动。
(2)给家庭成员提供功能选择界面:
不同的家庭成员对应不同的功能选择界面。
功能选择界面包括输入功能选项、调用相应程序两大需求。
管理员和普通用户对应的功能选择界面是不同的。
(3)创建收支选项文件:
根据提示用户输入家庭成员的序号、姓名、各项财务信息,如收入、支出、合计。
可一次性输入多条家庭成员的收支信息。
系统将家庭成员收支信息记录存储在系统磁盘中,以便进行管理、查找和备份。
(4)增加家庭成员收支信息:
可在原有收支信息的基础上增加新的家庭成员财务信息记录,保存在磁盘上,将增加后的文件存储状态显示给用户。
在增加新家庭成员收支记录的过程中,系统提示输入收入、支出两个财务构成项,最终合计,要求系统自动计算获得,并同样作为财务构成项存入文件对应的记录中。
(5)删除家庭成员收支信息:
提示用户输入要进行删除操作的家庭成员序号,如果在文件中有该家庭成员的收支信息存在,则将该序号所对应的姓名、序号、各种收入构成等在对应文件中加以删除,由系统提示是否继续删除操作,家长可进行多次删除操作。
(6)修改家庭成员收支信息:
提示用户输入要进行修改操作的家庭成员序号,如果在文件中有该家庭成员的收支信息存在,则提示用户输入该序号对应的家庭成员姓名、收入和支出构成等相应修改的选项,并将修改结果存储在文件中。
该部分需求也要提示用户选择是否进行修改操作。
修改操作中的合计部分,也需要由系统修改后的收入、支出项目自动计算修改后的合计财务数额,并连同用户输入的其他修改项一起存入磁盘文件中。
(7)查询家庭成员财务情况:
分为根据姓名和序号分别进行查询两种情况,分别提示用户输入要查询家庭成员信息的序号或姓名,如果在磁盘文件中有对应的家庭成员财务信息,则提示用户已找到,并逐项列出该家庭成员的收支状态。
在该功能中,也需要提示用户是否需要继续查找,如果不再继续查找,则返回主界面。
(8)家庭成员收支排行浏览:
要求根据家庭成员的合计项进行排行,以便用户对家庭成员收入状况有较直观方便的了解。
由于在磁盘存储的家庭成员收支文件可能有多个,所以提示用户要浏览的具体文件名,然后根据合计项从大到小进行排列,显示家庭成员序号、姓名和各项财务构成。
(9)家庭成员管理:
家长对普通家庭成员的管理也需要进行家庭成员的创建、增加、删除、修改和浏览,家长创建的家庭成员记录存储在“用户”的磁盘文件中,每当有家庭成员登录系统时,系统都会根据该文件中的用户名和密码进行核实判断,用户才能顺利登陆,家长还具有增加新家庭成员的功能。
新增家庭成员的登陆名、密码及权限等也被继续存储在用户文件中。
当某些家庭成员不再使用该系统时,还可以进行删除操作,并且家长具有修改家庭成员权限的功能。
课程设计四:
航空客运订票系统
1、问题描述:
航空客运订票的业务活动包括:
查询航线和客票预订的信息、客票预订和办理退票等事项。
设计一个计算机程序,使上述任务能借助计算机来完成。
2、系统必须存储的数据信息
(1)航线信息:
飞机抵达城市、航班号、飞机号、起降时间、航班票价、票价分析、总位置、剩余位置、已订票的客户名单。
(2)客户信息:
客户姓名、证件号、座位号。
3、系统能实现的操作和功能
(1)承办订票业务:
根据客户提出的要求(飞机抵达城市、起降时间、订票数量)查询该航班信息(包括票价、折扣和剩余位置),若满足要求,则为客户办理订票手续,输出座位号。
(2)查询功能:
1)查询航班信息:
根据降落地点、输出航班号、飞机号、起降时间、航班票价、票价折扣和剩余位置等信息。
2)查询客户预订信息:
根据客户证件号,输出航班号、房间号、座位等信息。
课程设计五:
学生成绩管理系统
1、问题描述
学生成绩管理系统是学校教学工作中处理学生信息的工具。
它利用计算机实现学生成绩信息管理工作的系统化与自动化,提高工作效率。
本课程设计要求使用单链表作为存储结构,用C语言实现学生成绩管理系统,它支持基本的录入、删除、查找、修改、统计和文件的读写功能。
2、功能描述
整个系统由以下几大功能模块组成:
(1)输入记录:
学生纪录由学生的基本信息和成绩信息字段组成。
该模块主要完成将数据存入单链表中。
记录可以从二进制形式存储的数据文件读入,也可以从键盘逐个输入记录。
(2)查询记录:
用户可以按照学生的姓名或学号在单链表中查找。
若找到满足查询条件的记录,则返回指向该学生记录的指针;否则,返回值为NULL的空指针,显示未找到记录的提示信息。
(3)更新记录:
实现对指定姓名或学号的学生信息进行修改、删除、插入和排序操作。
(4)统计记录:
完成对各门功课最高分和不及格人数的统计功能。
(5)输出记录:
实现屏幕显示单链表中的记录信息和将单链表中存储的记录信息写入数据文件的功能。
3、设计
(1)界面设计
程序的主界面是一个文本方式的菜单,用户通过键盘输入数字,选取相应的操作指令。
(2)数据结构设计
1)学生成绩信息结构体
结构体student用于存储学生的基本信息,作为单链表的数据域。
Typedefstructstudent
{
Charnum[10];/*学号*/
Charname[15];/*姓名*/
Intcgrade;/*课程一成绩*/
Intmgrade;/*课程二成绩*/
Integrade;/*课程三成绩*/
Inttotal;/*总成绩*/
Floataverage;/*平均成绩*/
};
2)单链表node结构体
next为单链表的指针域,结构体student作为单链表的数据域。
Typedefstructnode
{
Structstudentdata;
Structnode*next;
}node,*link;
(3)功能函数设计
程序中除了主函数外,共设计13个函数。
1)printheader()
函数原型:
voidprintheader()
功能:
用于在以表格形式显示记录时,打印输出表头信息。
2)printdata()
函数原型:
voidprintdata(node*pp)
功能:
用于在以表格形式显示记录时,打印输出单链表中某一结点pp的记录信息。
3)display()
函数原型:
voiddisplay(linkL)
功能:
用于显示单链表L中存储的学生记录,内容为student结构中定义的内容。
4)stringinput()
函数原型:
voidstringinput(char*t,intlens,char*notice)
功能:
用于输入字符串,并进行字符串长度验证(长度Notice用于保存printf()中输出的提示信息。
5)insert()
函数原型:
voidinsert(linkL)
功能:
用于在单链表L中增加学生纪录。
6)query()
函数原型:
voidquery(linkL,charfindmess[],charnameorphonenum[])
功能:
用于在单链表L中按姓名或学号查找满足条件的记录,nameorphonenum[]存储要查找的学生姓名或学号,findmess[]保存查找到的学生信息。
7)delete()
函数原型:
voiddelete(linkL,charnameorphonenum[])
功能:
用于在单链表L中找到满足条件的记录,然后删除该记录。
nameorphonenum[]存储要删除的学生姓名或学号。
8)modify()
函数原型:
voidmodify(linkL)
功能:
用于在单链表L中修改记录。
9)tongji()
函数原型:
voidtongji(linkL)
功能:
用于在单链表L中统计总分第一名、单科第一名、平均成绩最低的学生信息和各科不及格人数。
10)numberinput()
函数原型:
intnumberinput(char*notice)
功能:
用于输入数值型数据,Notice用于保存printf()中输出的提示信息,该函数返回用户输入的整型数据。
11)sort()
函数原型:
voidsort(linkL)
功能:
用于在单链表L中利用插入排序算法实现单链表按总分字段降序排序。
12)save()
函数原型:
voidsave(linkL)
功能:
用于将单链表L中的数据写入磁盘的数据文件中。
课程设计六:
停车场管理系统
1、问题描述
假设停车场只有一个可停放几辆汽车的狭长通道,并且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达的先后顺序依次排列,如果停车场内已停满汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,排在便道上的第一辆车即可进入;当停车场内某一辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该车辆开出大门后,为它让路的车辆再按原次序进入停车场。
每辆汽车在离开时,都要依据停留时间交费(从进入便道开始计时)。
在这里假设汽车不能从便道上开走,试设计这样一个停车场的模拟管理系统。
2、基本要求
(1)汽车的输入信息格式为(到达/离开的标志,汽车当前状态标志,汽车牌照号码,到达/离开的时刻)
(2)对于不合理的输入信息应提供适当的提示信息。
3、数据结构设计
(1)为了便于区分每辆汽车并了解当前每辆汽车所处的位置,需要记录汽车的牌照号码和汽车当前的状态,所以为汽车定义一个新的类型CAR,具体定义如下:
Typedefstruct
{
Char*license_plate;/*汽车牌照号码,定义为一个字符指针类型*/
Charstate;/*汽车当前的状态,字符S表示是停放在停车位上,字符
P表示停放在便道上,每辆车的初始状态用字符i表示*/
}CAR
(2)由于停车是一个狭长的通道,所以不允许两辆车同时进入停车场。
当有车到来要进入停车位时要依次停放,当某辆车要离开时,比它后到的车要先暂时离开停车位,而且越后到的车就越先离开停车位,显然这和栈的“后进先出”特点相吻合,所以可以用一个栈来描述停车场。
由于停车场只能停放有限的几辆车,为了便于停车场的管理,要为每个车位分配一个固定的编号,不妨设为1、2、3、4、5等,分别表示1号停车位、2号停车位、3号停车位、4号停车位、5号停车位,这与数组的下标相吻合,所以针对这种情况,使用一个顺序栈比较方便。
具体定义如下:
#defineMAX_STOP5
Typedefstruct
{
CARstop[MAX_STOP];
Inttop;
}STOPPING;
(3)当停车场的停车位上都已经停满了汽车,又有新的汽车到来时要把它调度到便道上,便道上的车辆要按照进入便道的先后顺序顺次停放在便道上,为便道上的每个位置也分配一个固定的编号,当有车从停车位离开后,便道上的第一辆汽车就立即进入停车位上的某个车位,由于问题描述中限制了便道上的汽车只能从便道上开走,即便道上的汽车只能在停车位上停放过后才能离开停车位,这样越早进入便道的汽车就越早进入停车位,而且每次进入停车位的汽车都是处于便道“最前面”的汽车,显然,这和队列的“先进先出”特点吻合,所以这里使用一个顺序队列来描述便道,可以利用数组的下标表示便道的位置。
具体定义如下:
#defineMAX_PAVE100
Typedefstruct
{
CARPAVE[MAX_PAVE];
Intfront,rear;
}PAVEMENT;
(4)当某辆车要离开停车场的时候,比它后进的停车位的车要为它让路,而且当它开走之后让路的车还要按原来的停放次序再次进入停车位的某个车位上,为了完成这项功能,再定义一个辅助栈,停车位中让路的车依次“压入”辅助栈,待提出开出请求的车开走后再从辅助栈的栈顶依次“弹出”到停车