You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

240 lines
4.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"windows.h"
#define number 100 //最大学生人数
#define id_len 20 //学号长度
#define name_len 30 //姓名长度
#define price 1.00 //每分钟单价
int count;
struct datacase
{
char id[id_len];
char name[30+1];
int time;
}stu[number];
int fun(char ch[id_len>name_len?id_len:name_len],int a);
int add();
int rep();
void calculation(int kc);
int fun(char ch[id_len>name_len?id_len:name_len],int a)
//查找所需要的记录存储在第几个结构体中 a=1按学号查找a=2按姓名查找
{
int k=-1;
int i;
for(i=0;i<count;i++)
{
if(1==a)
{
if(0==strcmp(stu[i].id,ch))
{
k=i;
break;
}
}
if(2==a)
{
if(0==strcmp(stu[i].name,ch))
{
k=i;
break;
}
}
}
return k;
}
int add()
{
int f=0;//添加的学号已存在f将被赋值为1
char select[4];
while(true)
{
if(count>number)
{
printf("系统已达存储上限,不可再添加\n");
system("pause");
return 0;
}
printf("请输入想要增加的学生信息:\n");
printf("学号:");
scanf("%s",stu[count].id);
for(int i=0;i<count;i++)
{
if(0==strcmp(stu[i].id,stu[count].id))
{
printf("该学号已存在!\n对应的学生信息为:姓名:%s 上机时间:%d\n",stu[i].name,stu[i].time);
system("pause");
system("cls");
f=1;
break;
}
}
if(f==1)
{
f=0;
continue;
}
else
{
printf("姓名:");
scanf("%s",stu[count].name);
calculation(count);
count++;
}
printf("是否继续添加学生信息继续请回答yes\n");//除yes外所有字符都会导致退出
scanf("%s",select);
if(0!=strcmp(select,"yes"))
{
return 0;
}
else
system("cls");
}
}
int rep()
{
int selec;
char select[4];
char id_r[id_len];
char name_r[name_len];
int k,x;
while(true)
{
printf(" 选择您希望进行的操作\n");
printf(" 1、修改学生学号。\n");
printf(" 2、修改学生姓名。\n");
printf(" 3、修改学生上机时长\n");
printf(" 4、退出修改\n");
scanf("%d",&selec);
system("cls");
switch(selec)
{
case 1://修改学号
printf("请输入需要修改的学生学号:");
scanf("%s",id_r);
k=fun(id_r,1);
if(k!=-1)
{
printf("您希望将他的学号修改为:");
scanf("%s",id_r);
if(fun(id_r,1)==-1)
{
printf("确认要将%s同学的学号修改为%s吗\n输入no可撤销操作\n",stu[k].name,id_r);
scanf("%s",select);
if(strcmp(select,"no"))
{
system("cls");
strcpy(stu[k].id,id_r);
printf("修改成功!");
}
else
break;
}
else
{
printf("该学号已存在!");
continue;
}
}
else
{
system("cls");
printf("未找到该条记录!请检查输入的学号是否正确%s\n",id_r);
continue;
}
break;
case 2://修改姓名
printf("请输入需要修改的学生姓名:");
scanf("%s",name_r);
k=fun(name_r,2);
if(k!=-1)
{
printf("您希望将他的姓名修改为:");
scanf("%s",name_r);
printf("确认要将%s同学的姓名修改为%s吗\n输入no可撤销操作",stu[k].name,name_r);
scanf("%s",select);
if(strcmp(select,"no"))
{
strcpy(stu[k].name,name_r);
printf("修改成功!\n");
system("pause");
}
else
continue;
}
else
{
system("cls");
printf("未找到该条记录!请检查输入的姓名是否正确%s\n",name_r);
continue;
}
break;
case 3:
printf("您希望以什么方式查看这名学生的记录?\n1、学号\n2、姓名\n");
scanf("%d",&x);
if(x==1)
{
printf("请输入该名学生的学号:");
scanf("%s",id_r);
k=fun(id_r,x);
if(k==-1)
{
system("cls");
printf("未找到该条学生信息\n");
continue;
}
else
calculation(k);
}
if(x==2)
{
printf("请输入该名学生的姓名:");
scanf("%s",name_r);
k=fun(name_r,x);
if(k==-1)
{
printf("未找到该条学生信息");
system("pause");
system("cls");
continue;
}
else
calculation(k);
}
break;
case 4: return 0;
default:return -1;
}
system("cls");
}
return 0;
}
void calculation(int kc)//计算上机时间
{
int ti[4];
printf("请按时:分的格式输入\n");
printf("请输入该生上机时间:");
scanf("%d:%d",&ti[0],&ti[1]);
printf("请输入该生的下机时间");
scanf("%d:%d",&ti[2],&ti[3]);
if(ti[0]>=0&&ti[1]>=0&&ti[2]>=0&&ti[3]>=0&&ti[0]<24&&ti[1]<60&&ti[2]<24&&ti[3]<60)//输入合法性检查
{
stu[kc].time=(ti[2]-ti[0])*60+ti[3]-ti[1];
system("cls");
printf("本次上机时间为:%d分钟\n",stu[kc].time);
system("pause");
}
else
{
printf("非法输入!请检查后重试\n");
printf("老子不干了!");
system("pause");
calculation(kc);
}
}