资源描述
附录代码:
#include "iostream”
#include <conio。h〉
#include "string。h”
#include <fstream〉
using namespace std;
#define Size 1000
class Record
{
public:
Record(); //构造函数
void Entersystem(); //进入系统函数
void GetPwd(); //获取密码
void SetDate(); //输入设置学生信息
void SetPwd(); //修改登录密码
void ReadDate(); //读取文本信息函数
void SaveData(); //向文本保存信息函数
void PutRecord(); //输入考勤函数
void FindRecord(); //查找学生信息函数
void ShowRecord(); //输出所有学生信息
void Order(); //按学号排序
void ModifyDate(); //修改学生信息
void DelRecord(); //删除学生信息
private:
int renshu; //学生人数
int chidao; //迟到次数
int zaotui; //早退次数
int kuangke; //旷课次数
int qingjia; //请假次数
long ID; //学生学号
char Name[20]; //学生姓名
char password[20]; //登录密码
void ShowDate(int i);
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//类的实现
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//构造函数
Record::Record()
{ renshu=0;
chidao=0;
zaotui=0;
qingjia=0;
kuangke=0;
ID=0;
Name[20]=0;
password[20]=0;
}
Record CRecord[Size];
char pwd[]={'1’,’2’,’3’,'4’,’5',’6’};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//输出函数
void Record::ShowDate(int i)
{ cout〈〈"\t”
<<CRecord[i]。ID〈<" "
〈〈CRecord[i].Name<<" ”
<〈CRecord[i]。chidao〈<” ”
<〈CRecord[i]。zaotui<〈” ”
〈〈CRecord[i]。qingjia〈<" "
<<CRecord[i]。kuangke〈〈endl;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//获取密码
void Record::GetPwd()
{ int a=0;
while(1)
{ char ch;
ch=getch();
if(ch==’\b’)
{
if(a!=0)
{
cout〈〈char(’\b’)〈〈" "〈〈char(’\b’);
a——;
}
}
else if(ch==’\r')
{ password[a]=’\0';
cout〈〈endl;
break;
}
else
{ cout〈<”*”;
password[a++]=ch;
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//登陆进入系统
void Record::Entersystem()
{ int a=3,b=1;
char repwd[20];
fstream file(”\\mima.dat”,ios::in|ios::binary);
file。get(repwd,20,’\0');
file。close();
b=strlen(repwd);
if(b)
{ strcpy(pwd,repwd);}
while(a)
{ system(”cls");
cout〈<"\n\n\n\n\t\t\t欢迎使用考勤管理系统!”;
cout<〈"\n\n\n\t\t请输入登陆密码:";
GetPwd();
a--;
if(strcmp(pwd,password)!=0)
{
if(a)
{ system(”cls");
cout<〈”\n\n\n\t\t密码输入错误!还有"<<a<〈"次输入机会!\n";
cout〈<"\t\t";
system(”pause”);
}
else
{ system(”cls”);
cout<〈"\n\n\n\t\t连续3次密码输入错误!系统自动退出!\n”;
cout<〈"\t\t”;
system("pause”);
exit(0);
}
}
else
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//修改密码
void Record::SetPwd()
{ char repwd[20]={0};
int a=0;
while(!a)
{ system(”cls");
cout〈〈”\n\n\n\n\t\t输入原密码: ”;
GetPwd();
if(strcmp(password,pwd)!=0)
{ cout〈<”\n\n\t\t原密码错误!\n\n”
〈<"\t\t重新输入请按0否则请按任意键\n\n”;
cin>〉a;
if(a)
{ system(”cls”);
cout〈〈”\n\n\n\n\t\t\t密码修改失败!\n\n";
}
}
else
{ cout〈〈”\n\n\t\t请输入新密码:";
GetPwd();
strcpy(repwd,password);
cout〈〈”\n\n\t\t再次输入新密码:”;
GetPwd();
if(strcmp(repwd,password)!=0)
{ cout<〈”\n\n\t\t两次输入密码不相同!\n\n”
〈〈”\t\t重新输入请按0否则请按任意键\n\n”;
cin>>a;
if(a)
{ system(”cls");
cout〈〈”\n\n\n\n\t\t\t密码修改失败!\n\n”;
}
}
else
{ strcpy(pwd,password);
cout〈〈”\n\n\t\t密码修改成功!请牢记你的新密码!\n\n”;
fstream file(”\\mima。dat”,ios::out|ios::binary);
file。write(pwd,strlen(pwd));
file.close();
break;
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//输入增添学生人数
void Record::SetDate()
{ int i=0;
int m=0;
cout〈〈”\n输入/增添学生人数 : ”;
cin>>m;
for(i=0;i<m;i++)
{ cout<〈”\n输入/增添第”〈<i+1〈〈”个学生的信息 :”<<endl;
cout<〈”\n\t学号: ”;
cin〉〉CRecord[renshu+i].ID;
cout<<”\n\t姓名: ";
cin〉>CRecord[renshu+i]。Name;
}
renshu+=m;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//按学号排序
void Record::Order()
{ int s,z;
long t;
char r[20];
s=renshu;
for(int i=0;i〈s;i++)
{for(int j=i+1;j〈s;j++)
if(CRecord[i].ID>=CRecord[j].ID)
{ strcpy(r,CRecord[i].Name);
strcpy(CRecord[i]。Name,CRecord[j].Name);
strcpy(CRecord[j]。Name,r);
t=CRecord[i]。ID;CRecord[i]。ID=CRecord[j].ID;CRecord[j]。ID=t;
z=CRecord[i]。chidao;CRecord[i].chidao=CRecord[j].chidao; CRecord[j]。chidao=z;
z=CRecord[i]。zaotui; CRecord[i]。zaotui=CRecord[j].zaotui; CRecord[j]。zaotui=z;
z=CRecord[i]。qingjia; CRecord[i]。qingjia=CRecord[j]。qingjia; CRecord[j]。qingjia=z;
z=CRecord[i]。kuangke;CRecord[i]。kuangke=CRecord[j]。kuangke; CRecord[j]。kuangke=z;
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//设置学生考勤信息
void Record::PutRecord()
{ int i;
double long id;
if(renshu<=0)
cout<〈”\n\n\n\n\t目前没有任何学生信息请先输入学生个人信息再进行此操作!\n\n”;
else
{ cout〈〈”\n请输入所查学生学号: ";
cin〉〉id;
for(i=0;i〈renshu;i++)
{
if(CRecord[i]。ID==id)
break;
}
if(i>=renshu)
cout〈<"\n没有你所查找的记录!\n”;
else
{
cout<〈”\n该学生的原始信息记录是:\n";
cout<〈"\n\t学号姓名迟到早退请假旷课"〈〈endl;
ShowDate(i);
cout〈〈"\n信息记录:\n”;
int m=0;
while(!m)
{ int n;
cout〈〈"\n\t请输入选择缺课类型: ( 1迟到 2早退 3请假 4旷课 ) : ”;
cin〉〉n;
switch(n)
{
case 1:
cout<〈”\n请输入迟到次数: ”;
cin>〉n;
CRecord[i].chidao+=n;
break;
case 2:
cout〈〈”\n请输入早退次数: ”;
cin〉>n;
CRecord[i].zaotui+=n;
break;
case 3:
cout<〈"\n请输入请假次数: ";
cin〉>n;
CRecord[i]。qingjia+=n;
break;
case 4:
cout<〈"\n请输入旷课次数: ”;
cin>〉n;
CRecord[i].kuangke+=n;
break;
default:
break;
}
cout〈〈”\n\t继续输入该生考情请输0否则输任意值: ”;
cin〉〉m;
}
cout〈<”\n该学生现在的信息记录是: \n";
cout〈<"\n\t学号姓名迟到早退请假旷课”〈〈endl;
ShowDate(i);
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//修改学生信息
void Record::ModifyDate()
{ int i,j=1;
long id;
if(renshu<=0)
cout<〈"\n\n\n\n\t目前没有任何学生信息请先输入学生个人信息再进行此操作!\n\n”;
else
while(j==1)
{ system(”cls");
cout〈〈”\n请输入要修改学生的学号: ";
cin〉>id;
for(i=0;i〈renshu;i++)
{
if(CRecord[i]。ID==id)
break;
}
if(i〉=renshu)
{ cout<〈”\n\t\t没有你所查找的记录!\n";
cout〈〈”\n重新查询修改请输0否则输任意值:”;
cin〉〉i;
if(i==0)
j=1;
else
{ system(”cls”);
cout〈〈”\n\n\n\n \t\t\t 信息修改失败!\n\n";
break;
}
}
else
{
cout〈<”\n该学生的原始信息是:\n”;
cout〈〈”\n\t学号姓名迟到早退请假旷课"〈〈endl;
ShowDate(i);
cout〈〈”\n信息修改: \n”;
char name[]={0};
int n=0;
while(n==0)
{ cout<〈”\n\t选择修改内容: ( 1学号 2姓名 3迟到 4早退 5请假 6旷课) : ”;
cin〉〉n;
switch(n)
{ case 1:
cout<<”\n新的学号:”;
cin〉〉id;
CRecord[i]。ID=id;
break;
case 2:
cout<<"\n新的姓名:";
cin〉〉name;
strcpy(CRecord[i]。Name,name);
break;
case 3:
cout〈〈”\n输入迟到次数:”;
cin〉〉n;
CRecord[i].chidao=n;
break;
case 4:
cout<〈"\n输入早退次数:";
cin>>n;
CRecord[i].zaotui=n;
break;
case 5:
cout〈〈"\n输入请假次数:”;
cin〉>n;
CRecord[i]。qingjia=n;
break;
case 6:
cout<〈”\n输入旷课次数:”;
cin〉>n;
CRecord[i].kuangke=n;
break;
default:
break;
}
cout〈〈”\n\t该学生修改后的信息是:\n";
cout〈〈”\n\t学号姓名迟到早退请假旷课”〈〈endl;
ShowDate(i);
cout〈<”\n\n 继续修改该生请输入0 修改其他学生请输入1 否则请输入其他任意值: ”;
cin〉〉j;
if(j==0)
n=0;
else if(j==1)
break;
else
{ j=2;
system(”cls");
cout〈<”\n\n\n\n \t\t\t 该学信息修改成功!\n\n";
break;
}
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//删除学生信息
void Record::DelRecord()
{ int i=0,j,z;
long t,id;
char r[]={0},A,a=’Y’,b=’N';
if(renshu〈=0)
cout〈〈"\n\n\n\n\t目前没有任何学生信息请先输入学生个人信息再进行此操作!\n\n";
else
{ cout〈<”\n删除所有学生信息情输1,删除个别学生信息请输2: ”;
cin〉>j;
if(j==1)
{ cout<〈"\n是否删除所有同学信息:确认(Y)/取消(N): ”;
cin>〉A;
if(A==a||A==a+32)
{ renshu=0;
cout〈<”\n\n\n\t\t\t所有信息删除成功!\n\n";
}
else if(A==b||A==b+32)
cout〈<”\n\n\t\t\t你取消了对所有信息的删除!\n\n";
else
cout<〈”\n\n\t\t\t输入错误!删除失败!\n\n”;
}
else if(j==2)
while(!i)
{ system("cls");
cout〈〈"\n请输入要删除学生的学号: ”;
cin〉〉id;
for(i=0;i〈renshu;i++)
{
if(CRecord[i].ID==id)
break;
}
if(i〉=renshu)
cout〈〈”\n没有你所查找的记录!\n”;
else
{ cout〈〈”\n该学生的原始信息是:\n”;
cout<<”\n\t学号姓名迟到早退请假旷课”<〈endl;
ShowDate(i);
cout<<"\n是否删除该学生的信息: ”
〈〈"确认(Y)/取消(N): ";
cin〉〉A;
if(A==a||A==a+32)
{ j=renshu—1;
strcpy(r,CRecord[i].Name);
strcpy(CRecord[i]。Name,CRecord[j]。Name);
strcpy(CRecord[renshu—1]。Name,r);
t=CRecord[i]。ID;CRecord[i]。ID=CRecord[j].ID;CRecord[j]。ID=t;
z=CRecord[i]。chidao;CRecord[i].chidao=CRecord[j]。chidao;CRecord[j].chidao=z; z=CRecord[i]。zaotui;CRecord[i]。zaotui=CRecord[j]。zaotui;CRecord[j]。zaotui=z; z=CRecord[i]。qingjia ; CRecord[i].qingjia=CRecord[j].qingjia;CRecord[j]。qingjia=z;
z=CRecord[i]。kuangke;CRecord[i]。kuangke=CRecord[j]。kuangke;
CRecord[j]。kuangke=z; renshu——;
cout〈<”\n\n\t\t该学生删除信息删除成功!\n\n";
}
else if(A==b||A==b+32)
cout〈〈"\n\n\t\t你取消了对该生信息的删除!\n\n";
else
cout<<”\n\n\t\t输入错误!删除失败!\n\n”;
}
cout〈〈"\n继续删除学生信息请输0 否则请输任意值: ”;
cin>>i;
if(i)
cout<〈"\n\n\n\n\t\t\t你取消了对学生信息的继续删除!\n";
}
else
cout〈<”\n\n\t\t\t输入错误!操作失败!\n\n”;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//按学号输出某个学生的信息
void Record::FindRecord()
{ int i;
long id;
int a=0;
if(renshu<=0)
cout〈<”\n\n\n\n\t目前没有任何学生信息请先输入学生个人信息再进行此操作!\n\n";
else
{ cout〈<”\n请输入你要查找的学生学号: ";
cin〉〉id;
for(i=0;i<renshu;i++)
{
if(CRecord[i]。ID==id)
{
a=1;
cout〈<"\n\t学号姓名迟到早退请假旷课"〈<endl;
ShowDate(i);
}
}
if(a==0)
cout〈〈”\n没有你所查找的记录!";
cout〈〈endl;
return;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//输出全班学生的信息
void Record::ShowRecord()
{ int i;
Order();
if(renshu〈=0)
cout<<”\n\n\n\n\t目前没有任何学生信息请先输入学生个人信息再进行此操作!\n\n";
else
{ cout〈<”\n输出全班一学期的考情情况”〈<endl;
cout〈〈”\n\t学号\t姓名\t迟到\t早退\t请假\t旷课"〈〈endl;
for(i=0;i<renshu;i++)
{ ShowDate(i);
}
return;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//从文本中读取信息
void Record::ReadDate()
{ int i=0;
char lingshi[]={0};
fstream file(”\\Record。txt”);
if(!file)
{ ofstream file1(”\\Record。txt");
file1.close();
}
else
file。close();
ifstream file2(”\\Record。txt”);
file2>>lingshi>>lingshi〉>lingshi〉>lingshi〉〉lingshi〉〉lingshi;
while(!file2.eof())
{ file2>〉CRecord[i].ID;
file2>〉CRecord[i]。Name;
file2>〉CRecord[i]。chidao;
file2>〉CRecord[i].zaotui;
file2〉〉CRecord[i].qingjia;
file2>〉CRecord[i]。kuangke;
i++;
}
if(i==0)
renshu=i;
else
{ i——;
renshu=i;
}
file2。close();
return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//向文本中保存信息
void Record::SaveData()
{
int i=0;
Order();
ofstream file("\\Record。txt”);
file<〈"学号\t”<〈”姓名\t"〈<"迟到\t”〈〈”早退\t"<<"请假\t"〈〈”旷课"〈<endl;
for(i=0;i〈renshu;i++)
{ file〈〈CRecord[i].ID<〈”\t”;
file<〈CRecord[i].Name〈〈"\t”;
file<〈CRecord[i].chidao<<"\t”;
file<〈CRecord[i]。zaotui〈〈”\t”;
file<<CRecord[i]。qingjia〈〈"\t”;
file〈<CRecord[i]。kuangke<〈endl;
}
file。close();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//测试主函数
main()
{ Record Stu,Enter;
int a=1;
Enter。Entersystem();
Stu。ReadDate();
while(a)
{ system(”cls”);
// cout<〈”\n\t****************08级物理系光信班****************\n";
cout<〈”\n\t****************上课考勤管理系统****************\n\n”;
cout〈<"\n\t*************** 1: 输入/增添学生名 **************\n\n”;
cout〈<”\t*************** 2: 修改学生信息 ***************\n\n”;
cout〈〈"\t*************** 3: 单人考勤信息 ***************\n\n";
cout<〈”\t*************** 4: 全班考情信息 ***************\n\n”;
cout〈<”\t*************** 5: 输入学生考情 ***************\n\n";
cout〈<”\t*************** 6: 删除学生信息 ***************\n\n”;
cout〈〈"\t*************** 7: 修改登录密码 ***************\n\n”;
cout〈〈"\t*************** 8: 退出 ***************\n\n”;
cout〈<"请选择 : ”;
int choose=0;
cin〉>choose;
system(”cls”);
switch(choose)
{case 1:
Stu.SetDate();
break;
case 2:
Stu。ModifyDate();
break;
case 3:
Stu.FindRecord();
break;
case 4:
Stu。ShowRecord();
break;
case 5:
Stu。PutRecord();
break;
case 6:
Stu。DelRecord();
break;
case 7:
Stu。SetPwd();
break;
case 8:
Stu.SaveData();
exit(0);
defaul
展开阅读全文