#include<iostream>
#include<iomanip>
#include<fstream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
void menu(); //目录函数
void input(); //输入函数
void save() ; //保存函数
void modify(); //修改函数
void search(); //查询函数
void lessonput1 (int y); //用于输出课程名
void lessonput2 (int i,int j); //用于输出旷工类型
void select(int m); //选择函数
void quit() ; //退出函数
void paixu1(); //按员工排序
void paixu2(); //按备注说明排序
struct staff
{ char name[10];
int num;
int month[5];
int day[5];
int classnum[5];
char classname[20];
int type[5]; //旷工分类类型
int f; //用于计算旷工次数
}stu[20];
struct lesson //在排序函数2中使用
{ char name;
int g; //用于计算旷工人次
}les[6];
/***************************主函数***********************************/
void main()
{ int m;
menu();
bool flag=0;
do
{
cin>>m;
if(m>=1&&m<=6)
flag=1;
else
cout<<"指令错误!请重新输入:";
}while(flag==0);
while(m!=6)
{
select(m); //功能选择函数
menu();
flag=0;
do
{
cin>>m;
if((m>=1&&m<=6))
flag=1;
else
cout<<"指令错误!请重新输入:";
}while(flag==0);
}
quit();
system("pause");
}
/*******************************目录函数**********************************/
void menu()
{ cout<<"\t\t**************************************************\n";
cout<<"\t\t** 欢 迎 使 用 本 系 统 **\n";
cout<<"\t\t**************************************************\n";
cout<<"\t\t** 1. 添加员工旷工信息 **\n";
cout<<"\t\t** 2. 查询员工旷工信息 **\n";
cout<<"\t\t** 3. 修改员工旷工信息 **\n";
cout<<"\t\t** 4. 按员工旷工次数排序 **\n";
cout<<"\t\t** 5. 按每周的旷工人次排序 **\n";
cout<<"\t\t** 6. 退出本系统 **\n";
cout<<"\t\t**************************************************\n";
cout<<" 请输入1~6选择功能\n";
}
/**********************************输入函数*********************************/
void input()
{
for(int i=0;i<20;i++)
{ cout<<"请输入员工姓名和工号"<<endl;
cin>>stu[i].name>>stu[i].num;
cout<<"请依次输入旷工日期(月-日)·旷工次数(仅数字)·备注说明(输入字母代表 a(请假) b(未请假事后补假条) c(未请假事后也未补假条))"
<<"旷工分类类型(输入数字代表0(迟到) 1(早退) 2(请假) 3(旷课))"<<endl;
for(int j=0;j<5;j++)
{ cin>>stu[i].month[j]>>stu[i].day[j]>>stu[i].classnum[j]>>stu[i].classname[j]>>stu[i].type[j];
char c;
cout<<"是否继续输入该员工其他旷工信息(y或n)"<<endl;
cin>>c;
if(c=='y') cout<<"请继续按以上顺序输入"<<endl;
if(c=='n') break;
}
char k;
cout<<"是否继续输入其他员工旷工信息(y或n)"<<endl;
cin>>k;
if(k=='n') break;
}
save();
}
/******************************保存函数******************************/
void save()
{ int i;
fstream fout("D:\\考勤.txt",ios::binary);
for(i=0;i<20;i++)
{
fout.write((char*)&stu[i],sizeof (staff));
}
cout<<"员工信息已保存"<<endl;
}
/*******************************修改函数*****************************/
void modify()
{
int i,j,c=0,k,b,d=0,m,n;
ofstream fout("D:\\考勤.txt",ios::binary);
if(!fout)
{
cout<<"文件不能打开"<<endl;
fout.close();
return ;
}
cout<<"请输入要修改员工工号"<<endl;
cin>>k;
cout<<"请输入要修改员工的旷工日期(月-日)"<<endl;
cin>>m>>n;
cout<<"请输入要修改员工的旷工次数:"<<endl;
cin>>b;
bool y=0;
do
{
for(i=0;i<20;i++)
{
fout.write((char*)&stu[i],sizeof(struct staff));//打开并修改文件
string s0 ="\n\r";//写入换行符【文本文件:换行符\n 二进制文件:换行符\r\n】
fout.write(s0.c_str(),sizeof(char) * (s0.size()));
for(j=0;j<5;j++)
{
if (k==stu[i].num&&b==stu[i].classnum[j]&&m==stu[i].month[j]&&n==stu[i].day[j])
{
c=i;
d=j;
}
}
}
if(c!=0&&d!=0) y=1;
else
{ cout<<"输入信息不存在,请重新输入工号·日期·次数"<<endl;
cin>>k>>m>>n>>b;
}
}while(y==0);
cout<<"请输入新修改的内容:\n";
//下面输入该员工新信息
cout<<"请依次输入要修改的员工姓名和工号旷工日期(月-日)·旷工次数(仅数字)·"
<<"备注说明(输入字母代表 a(请假) b(未请假事后补假条) c(未请假事后也未补假条))"
<<"旷工分类类型(输入数字代表0(迟到) 1(早退) 2(请假) 3(旷课))"<<endl;
cin>>stu[c].name>>stu[c].num>>stu[c].month[d]>>stu[c].day[d]>>stu[c].classnum[d]>>stu[c].classname[d]>>stu[c].type[d];
save();
}
/********************************查询函数****************************/
void search()
{
int i,j;
ofstream fout("D:\\考勤.txt",ios::binary);
int N;
cout<<"请输入您要查找的员工工号:\n";
cin>>N;
if(fout)
{ for(i=0;i<20;i++)
{
fout.write((char*)&stu[i],sizeof(struct staff));
string s0 ="\n\r";//写入换行符【文本文件:换行符\n 二进制文件:换行符\r\n】
fout.write(s0.c_str(),sizeof(char) * (s0.size()));
for(j=0;j<5;j++)
{
if(N==stu[i].num)
{
if(stu[i].month[j]==0) break;
cout<<"员工的信息为:姓名 工号 月-日 次数 备注说明 旷工分类类型";
cout<<" "<<stu[i].name<<setw(7)<<stu[i].num<<setw(8)
<<stu[i].month[j]<<stu[i].day[j]<<setw(8)<<stu[i].classnum[j]<<setw(12);
lessonput1( stu[i].classname[j]);
cout<<" "<<setw(10);
lessonput2 (i,j);
cout<<endl;
}
}
}
}
else
{ cout<<"文件无法打开\n";
exit(0);
fout.close();
}
}
/***********************排序函数1***********************************/
void paixu1()
{ int i,j;
staff temp;
for(int m=0;m<20;m++) stu[m].f=0;
ofstream fout("D:\\考勤.txt",ios::binary);
if(fout)
{
for(i=0;i<20;i++)
{
fout.write((char*)&stu[i],sizeof(struct staff));
string s0 ="\n\r";//写入换行符【文本文件:换行符\n 二进制文件:换行符\r\n】
fout.write(s0.c_str(),sizeof(char) * (s0.size()));
for(j=0;j<5;j++)
{ if(stu[i].type[j]==3) stu[i].f++;
}
}
}
else
{ cout<<"文件不能打开"<<endl;
fout.close();
return ;
}
for(int m=0;m<20;m++)
{ for(int n=0;n<20-m;n++)
{ if(stu[n].f<stu[n+1].f)
{ temp=stu[n];
stu[n]=stu[n+1];
stu[n+1]=temp;
}
}
}
cout<<"排序结果:员工姓名 旷工次数"<<endl;
for(int n=0;n<20;n++)
{
if(stu[n].num==0) break;
cout<<" "<<stu[n].name<<setw(15)<<stu[n].f<<endl;
}
}
/************************排序函数2***************************************/
void paixu2()
{ les[0].name='a';les[1].name='b';les[2].name='c';les[3].name='d';
les[4].name='e';les[5].name='f';
for(int m=0;m<7;m++) les[m].g=0;
int i,j;
lesson temp;
ofstream fout("D:\\考勤.txt",ios::binary);
if(fout)
{
for(i=0;i<20;i++)
{ fout.write((char*)&stu[i],sizeof(struct staff));
string s0 ="\n\r";//写入换行符【文本文件:换行符\n 二进制文件:换行符\r\n】
fout.write(s0.c_str(),sizeof(char) * (s0.size()));
for(j=0;j<5;j++)
{ for(int n=0;n<6;n++)
{ if(stu[i].classname[j]==les[n].name) les[n].g++;
}
}
for(int m=0;m<20;m++)
{ for(int n=0;n<20-m;n++)
{ if(les[n].g<les[n+1].g)
{ temp=les[n+1];
les[n+1]=les[n];
les[n]=temp;
}
}
}
}
}
else
{ cout<<"文件不能打开"<<endl;
fout.close();
return ;
}
cout<<"排序结果:备注说明 旷工人次"<<endl;
for(int n=0;n<6;n++)
{ cout<<" ";
lessonput1(les[n].name);
cout<<setw(15)<<les[n].g;
cout<<endl;
}
}
/*******************************选择函数**********************************/
void select(int m )
{ switch(m)
{
case 1: input(); break;
case 2: search(); break;
case 3: modify(); break;
case 4: paixu1(); break;
case 5: paixu2(); break;
case 6: quit(); break;
}
}
/******************************退出函数******************************/
void quit()
{
cout<<"谢谢使用本系统!\n";
exit(0);
}
/*********************备注说明输出函数***************************************/
void lessonput1 (int y)
{
switch(y)
{
case 'a':cout<<"请假"; break;
case 'b':cout<<"未请假事后补假条"; break;
case 'c':cout<<"未请假事后也未补假条"; break;
}
}
/*********************缺工类型输出函数***************************************/
void lessonput2 (int i,int j)
{ switch(stu[i].type[j])
{
case 0:cout<<"迟到"; break;
case 1:cout<<"早退"; break;
case 2:cout<<"请假"; break;
case 3:cout<<"旷工"; break;
}
}
int类型的数字全部不能用txt显示,这是为什么啊!!!!!!
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200618141653419.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjc2MzYwMA==,size_16,color_FFFFFF,t_70)
求助这是什么问题啊,应该怎么改啊!!!!!!
最新推荐文章于 2024-09-21 12:14:27 发布