目录
(六)计算余额模块Suan_Qian(int dif,int k);
(3)调用建立新档案函数,如图所示输入学号、姓名、密码、班级、金额
第1部分 实训题目与要求
1. 问题提出
为了便于管理,需要对机房的上机收费进行计算机管理,所需要的功能为:建立学生的上机档案、对于毕业的学生能够删除其档案、根据上机和下机时间计算出本次所需费用、能够续钱。
2. 功能要求
循环显示如图6所示的主菜单。
在主菜单中选择1:建立名为duli16.3.dat的文件,并在其中添加若干学生的上机档案,信息包括学号、姓名、金额,要求学号是唯一的。
在主菜单中选择2:添加新档案,这时要求新学号和已有的学号不能重号。
在主菜单中选择3:注销旧档案。
在主菜单中选择4:要求用户输入学号,然后系统显示该学生档案,并自动开始计时(计时方法采用下述方法),如果原来余额不足6元,则不能上机,而且显示“余额不够,请续钱!”。
计时方法:分别用系统提供的库函数time记录开始和结束的时间,比如start=time(NULL)和end=time(NULL),其中start和end是系统已声明的名为time_t的结构体类型,在程序中使用变量start和end前必须用“time_t start, end;”定义。difftime(end, start)函数返回以秒为单位的两个时间差,其返回类型是double型。可用dif=(int)difftime(end, start)使得整形变量dif得到时间差,再用dif/3600、dif%3600/60、dif%60分别计算时、分、秒。使用time_t类型或调用time和difftime函数时需要加命令行“#include <time.h>”,调用time函数时还需要加命令行“#include <stdio.h>”。
在主菜单中选择5:停止对该学生计时,同时根据用户输入的学号,计算该学生上机时间,并按1小时2元收费(30分钟以内按半小时处理,60分钟以内按1小时处理),然后显示上机前后的金额。
在主菜单中选择6:要求用户输入学号和续钱额,续钱完成后分别显示续钱前后的金额。
在主菜单中选择7:此项功能学生自由发挥,根据本组爱好增加与本题目相关的新功能。
在主菜单中选择0:显示结束信息(如“感谢使用本软件!已正常退出,按任意键结束。”),按任意键后,退出本功能。
……………………………
.请输入选项编号(0 ~7):.
……………………………
. 1——建立上机档案 .
. 2——添加新档案 .
. 3——注销旧档案 .
. 4——开始上机 .
. 5——离开机房 .
. 6——续钱 .
. 7——创新功能(可选) .
. 0——退出系统 .
……………………………
图6 机房收费管理主菜单
3. 任务分工
负责编写:
建立上机档案函数create();
添加新档案函数add();
注销旧档案函数cancel();
上机函数up();
结算金额函数Suan_Qian(int dif,int k);
续钱函数top_up();
创新功能函数innovate();
创新功能:查询余额函数inquiry();
创新功能:修改密码函数mod();
创新功能:显示所有学生函数XianShi();
主函数Main();
第2部分 设计实训题目功能
1. 总体设计
建立上机档案create(); 添加新档案add(); 注销旧档案cancel();
开始上机up(); 计算余额Suan_Qian(int dif,int k); 续钱top_up();
创新功能innovate();
查询余额inquiry(); 修改密码mod(); 显示所有学生XianShi();
2. 算法设计
(一)主函数模块
(二)建立新档案模块create();
(三)新增档案模块add();
(四)注销旧档案模块cancel();
(五)上机模块up();
(六)计算余额模块Suan_Qian(int dif,int k);
(七)续钱模块top_up();
(八)创新功能模块innovate();
3. 数据结构
struct student
{
char num[15]; /*学号*/
char name[20]; /*姓名*/
char mima[15];/*密码*/
char clas[20]; /*班级*/
int money;//余额
} stu[50],st[50]; //先定义50名,后续可修改数据
4. 程序代码设计
(一)主函数
用于主要代码组成
int main(){
char chose='\0',yes_no='\0';
int flag=0;
int y=1;
int dif=0,k;
time_t start_t,end_t;
do{
menu();
printf("请选择输入选项编号\n");
scanf("%c",&chose);
getchar();
switch(chose){
case '1':
<