📄 学生信息管理.cpp
字号:
#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>
#include<string.h>
const int MaxSize=1000;
typedef struct Clock
{
int hour,minute,second;
}clock;
void DisClock(clock c)
{
cout<<c.hour<<":"<<c.minute<<":"<<c.second<<endl;
}
clock Subtime(clock c1,clock c2)
{
clock sub;
if(c2.second<c1.second)
{
c2.minute--;
c2.second+=60;
sub.second=c2.second-c1.second;
}
else sub.second=c2.second-c1.second;
if(c2.minute<c1.minute)
{
c2.hour--;
c2.minute+=60;
sub.minute=c2.minute-c1.minute;
}
else sub.minute=c2.minute-c1.minute;
if(c2.hour<c1.hour)
{
cerr<<"error!"<<endl;
exit(1);
}
else sub.hour=c2.hour-c1.hour;
return sub;
}
clock Add(clock c1,clock c2)
{
clock add;
if((c1.second+c2.second)>=60)
{
add.second=c1.second+c2.second-60;
c1.minute+=1;
}
else add.second=c1.second+c2.second;
if((c1.minute+c2.minute)>=60)
{
add.minute=c1.minute+c2.minute-60;
c1.hour+=1;
}
else add.minute=c1.minute+c2.minute;
add.hour=c1.hour+c2.hour;
return add;
}
typedef struct StuInfo
{
int ID;
char name[20];
int Class;
clock buytime;
clock totaltime;
clock remain;
}stuinfo;
typedef struct INFO
{
stuinfo data;
INFO *next;
}InfoList;
void Insert1(InfoList *&HL,const StuInfo &item)
{
InfoList *newptr=new InfoList;
if(newptr==NULL)
{
cerr<<"内存分配失败!"<<endl;
exit(1);
}
newptr->data=item;
InfoList *ap,*cp;
ap=HL;
cp=HL->next;
while(cp!=NULL)
if(item.ID<cp->data.ID) break;
else
{
ap=cp;
cp=cp->next;
}
if(ap==HL)
{
newptr->next=HL->next;
HL->next=newptr;
}
else
{
newptr->next=cp;
ap->next=newptr;
}
}
void PrintInfo(InfoList *info)
{
if(info->next==NULL)
{
cout<<"暂无学生信息!"<<endl;
exit(1);
}
cout<<"******学生信息(按学号排列)******"<<endl;
InfoList *head=new InfoList;
head=info->next;
while(head!=NULL)
{
cout<<setw(5)<<head->data.ID<<" "<<head->data.name<<" "<<head->data.Class<<" "<<endl;
cout<<"购买机时:"<<head->data.buytime.hour<<":"<<head->data.buytime.minute<<":"<<head->data.buytime.second<<endl;
cout<<"总机时:"<<head->data.totaltime.hour<<":"<<head->data.totaltime.minute<<":"<<head->data.totaltime.second<<endl;
cout<<"剩余机时:"<<head->data.remain.hour<<":"<<head->data.remain.minute<<":"<<head->data.remain.second<<endl;
head=head->next;
}
cout<<endl;
}
void CreatInfoList(InfoList *info)
{
info->next=NULL;
stuinfo stu[5]={{003,"aaa",42,{10,23,56},{45,05,00},{19,24,32}},{002,"dsd",42,{9,12,34},{49,23,53},{10,23,45}},{001,"vvv",43,{12,34,5},{23,34,56},{20,34,9}},{004,"uio",45,{23,45,2},{0,0,0},{0,0,0}},{005,"and",44,{34,45,34},{23,45,43},{12,34,45}}};
for(int j=0;j<5;j++) Insert1(info,stu[j]);
}
InfoList* FindStu(InfoList *info,int id)
{
InfoList *cp=new InfoList;
cp=info->next;
if(cp==NULL)
{
cerr<<"暂无学生信息!"<<endl;
exit(1);
}
while(cp!=NULL)
{
if(cp->data.ID==id) return cp;
else cp=cp->next;
}
cout<<"没有找到学号为"<<id<<"的学生信息!"<<endl;
return NULL;
}
void ChangeInfo(InfoList *info)
{
if(info->next==NULL)
{
cerr<<"暂无学生信息!"<<endl;
exit(1);
}
InfoList *cp=new InfoList;
int num;
cout<<"请输入要修改信息的学生的学号:"<<endl;
cin>>num;
cp=FindStu(info,num);
if(cp!=NULL)
{
cout<<"请输入需要修改的项目: 1:班级 2:购买机时 3:总机时 "<<endl;
int k;
cin>>k;
switch(k)
{
case 1: cout<<"请输入新的班级:";
int Class; cin>>Class;
cp->data.Class=Class;
break;
case 2: cout<<"请输入购买机时数:"<<endl;
clock buy; cin>>buy.hour>>buy.minute>>buy.second;
cp->data.buytime=Add(cp->data.buytime,buy);
cp->data.totaltime=Add(cp->data.totaltime,buy);
break;
case 3: cout<<"请输入总机时数:"<<endl;
clock total; cin>>total.hour>>total.minute>>total.second;
cp->data.totaltime=total;
break;
}
}
else
cout<<"没有找到有关的学生信息,无法修改!"<<endl;
}
void Count0(InfoList *&info)
{
if(info->next==NULL)
{
cout<<"暂无学生信息!"<<endl;
exit(1);
}
InfoList *cp=new InfoList;
cp=info->next;
int count=0;
cout<<"剩余机时为零的学生有:"<<endl;
while(cp!=NULL)
{
if(cp->data.remain.hour==0&&cp->data.remain.minute==0&&cp->data.remain.second==0)
{
cout<<cp->data.ID<<" ";
count++;
}
cp=cp->next;
}
if(count==0) cout<<"无!"<<endl;
else
{ cout<<endl;
cout<<"当前剩余机时为零的学生共有"<<count<<"人."<<endl;
}
}
typedef struct CurrentStu
{
int ID;
char name[20];
int Class;
int CN;
clock geton;
clock getoff;
}currentstu;
typedef struct CurrentList
{
currentstu data;
CurrentList *next;
}CurList;
typedef struct STack
{
int stack[200];
int top;
}Stack;
void InitStack(Stack &S)
{
S.top=-1;
}
void ClearStack(Stack &S)
{
S.top=-1;
}
int StackEmpty(Stack &S)
{
return S.top==-1;
}
int Peek(Stack &S)
{
if(S.top==-1)
{
cerr<<"当前栈为空!"<<endl;
exit(1);
}
return S.stack[S.top];
}
void Push(Stack &S,const int item)
{
if(S.top==200-1)
{
cerr<<"栈已满!"<<endl;
exit(1);
}
S.top++;
S.stack[S.top]=item;
}
int Pop(Stack &S)
{
if(S.top==-1)
{
cerr<<"当前栈为空!"<<endl;
exit(1);
}
int temp=S.stack[S.top];
S.top--;
return temp;
}
int StackFull(Stack &S)
{
return S.top ==200-1;
}
void InitCurList(CurList *&HL)
{
HL=new CurList;
HL->next=NULL;
}
void Insert2(CurList *&HL,const currentstu &item)
{
CurList *newptr=new CurList;
if(newptr==NULL)
{
cerr<<"内存分配失败!"<<endl;
exit(1);
}
newptr->data=item;
CurList *ap,*cp;
ap=HL;
cp=HL->next;
while(cp!=NULL)
if(item.ID<cp->data.ID) break;
else
{
ap=cp;
cp=cp->next;
}
if(ap==HL)
{
newptr->next=HL->next;
HL->next=newptr;
}
else
{
newptr->next=cp;
ap->next=newptr;
}
}
CurList* FindCur(CurList *&HL,int id)
{
CurList *cp=new CurList;
cp=HL->next;
if(cp==NULL)
{
cerr<<"目前没有学生在上机!"<<endl;
return NULL;
}
while(cp!=NULL)
{
if(cp->data.ID==id)
{
cout<<"该学生正在上机!"<<endl;
cout<<cp->data.name<<" "<<cp->data.Class<<" "<<cp->data.CN<<endl;
cout<<"其上机时间为:";
cout<<cp->data.geton.hour<<":"<<cp->data.geton.minute<<":"<<cp->data.geton.second<<endl;
return cp;
}
else cp=cp->next;
}
cout<<"学号为"<<id<<"的学生没有在上机!"<<endl;
return NULL;
}
void DeleteCur(CurList *&HL,int id)
{
if(HL->next==NULL)
{
cout<<"无法执行删除操作!"<<endl;
exit(1);
}
CurList *cp=new CurList,*ap=new CurList;
ap=HL; cp=HL->next;
while(cp!=NULL)
{
if(cp->data.ID==id) break;
else
{
ap=cp;
cp=cp->next;
}
}
if(cp==NULL)
{
cerr<<"没有找到该学生!"<<endl;
exit(1);
}
else
{
ap->next=cp->next;
delete cp;
cp=NULL;
}
}
void PrintCur(CurList* &HL)
{
if(HL->next==NULL)
{
cout<<"暂无学生上机!"<<endl;
exit(1);
}
cout<<"******上机学生信息(按学号排列)******"<<endl;
CurList *head=new CurList;
head=HL->next;
while(head!=NULL)
{
cout<<setw(5)<<head->data.ID<<" "<<head->data.name<<" "<<head->data.Class<<" "<<endl;
cout<<"进入时间:";
DisClock(head->data.geton);
head=head->next;
}
cout<<endl;
}
void Manage(CurList *&HL,InfoList *&info,Stack &S)
{
cout<<"请输入指令: 1 上机 2 注销 "<<endl;
int command; cin>>command;
if(command==1)
{
if(StackEmpty(S))
{
cerr<<"抱歉,目前已没有空闲机位!"<<endl;
exit(1);
}
cout<<"请输入要上机的学生的学号:";
int id; cin>>id;
InfoList *reg=new InfoList;
reg=FindStu(info,id);
if(reg==NULL)
{
cerr<<"没有找到该学生的相关信息!"<<endl;
exit(1);
}
else
{
clock left;
left=reg->data.remain;
if(left.hour==0&&left.minute==0&&left.second==0)
{
cerr<<"该学生已没有剩余机时!"<<endl;
exit(1);
}
else
{
currentstu temp;
temp.ID=reg->data.ID;
temp.Class=reg->data.Class;
strcpy(temp.name,reg->data.name);
cout<<"请输入当前时间:"<<endl;
int hour,minute,second;
cin>>hour>>minute>>second;
cout<<hour<<":"<<minute<<":"<<second<<endl;
temp.geton.hour=hour;
temp.geton.minute=minute;
temp.geton.second=second;
temp.CN=Pop(S);
Insert2(HL,temp);
}
}
}
if(command==2)
{
cout<<"请输入要注销的学生的学号:"<<endl;
int num;
cin>>num;
CurList *p=new CurList;
p=FindCur(HL,num);
if(p==NULL)
{
cout<<"无法执行注销命令!"<<endl;
exit(1);
}
else
{
cout<<"请输入当前时间:"<<endl;
int Hour,Minute,Second;
cin>>Hour>>Minute>>Second;
cout<<Hour<<":"<<Minute<<":"<<Second;
p->data.getoff.hour=Hour;
p->data.getoff.minute=Minute;
p->data.getoff.second=Second;
int no=p->data.CN;
Push(S,no);
InfoList *tmp=new InfoList;
tmp=FindStu(info,p->data.ID);
if(tmp==NULL) exit(1);
else
{
clock newtime;
newtime=Subtime(p->data.geton,p->data.getoff);
cout<<endl;
cout<<"该生本次上机的时间为:";
cout<<newtime.hour<<":"<<newtime.minute<<":"<<newtime.second<<endl;
tmp->data.remain=Subtime(newtime, tmp->data.remain);
tmp->data.totaltime=Subtime(newtime,tmp->data.totaltime);
DeleteCur(HL,num);
}
}
}
}
void main()
{
Stack Computer;
InitStack(Computer);
int i;
for(i=0;i<200;i++)
Push(Computer,i+1);
InfoList *List1=new InfoList;
CreatInfoList(List1);
PrintInfo(List1);
ChangeInfo(List1);
PrintInfo(List1);
Count0(List1);
InfoList *p1=new InfoList;
cout<<"现在查找学号为20的学生信息"<<endl;
p1=FindStu(List1,20);
CurList *List2=new CurList;
InitCurList(List2);
CurList *p2=new CurList;
cout<<"现在查找学号为5的学生是否在上机"<<endl;
p2=FindCur(List2,005);
Manage(List2,List1,Computer);
Manage(List2,List1,Computer);
Manage(List2,List1,Computer);
Manage(List2,List1,Computer);
PrintCur(List2);
cout<<"现在查找学号为5的学生是否在上机"<<endl;
p2=FindCur(List2,005);
Manage(List2,List1,Computer);
PrintCur(List2);
cout<<"现在查找学号为5的学生是否在上机"<<endl;
p2=FindCur(List2,005);
PrintInfo(List1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -