#include <string>
#include <time.h>
#include <cstdio>
#include <ctype.h>
#include <math.h>
#include <iomanip>
#include <cstdlib>
#include <limits.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 20 //输入信息字符串的最大长度
#define M 100 //系统存储的最大人数
struct Telem
{
char num[N]; //学号
char name[N]; //姓名
char bir[N]; //生日
char sex[N]; //性别
char statue[N]; //健康状况
}b[M],tmp[M];
struct Node //节点
{
Telem data;
Node *next;
Node(char *c="\0",Node *n=NULL)
{
next=n;//
strcpy(data.num,c);
strcpy(data.name,c);
strcpy(data.bir,c);
strcpy(data.sex,c);
strcpy(data.statue,c);
}
};
class LinkList
{
private:
Node *head; //头指针,存储第一个空节点的地址
int size; //链表长度
public:
LinkList(Node*n,int sz) //构造函数
{
head=NULL;
size=0;
};
void init(Telem a[],int n) //初始化函数
{
Node *p=new Node("\0",NULL);
head=p;
Node *q;
for(int i=1;i<=n;i++)
{
q=new Node;
q->data=a[i];
p->next=q;
p=q;
}
p->next=NULL;
size=n;
cout<<endl<<" 建表成功!"<<endl;
};
//析构函数
~LinkList(){delete[] head;};
//清空函数
void clear()
{
delete[] head;
head=NULL;
size=0;
cout<<endl<<" 清空成功!"<<endl;
};
//判断链表是否非空
bool empt()
{
if(size==0||head->next==NULL)
return true;
return false;
};
//查找函数
void find(char *c)
{
if(size==0)
{
cout<<endl<<" <<<<<<<<<<<<<<<<<<<<<<对不起!学生不存在!>>>>>>>>>>>>>>>>>>>>>>"<<endl;
return ;
}
Node *p;
p=head->next;
bool ok=false;
while(p!=NULL)
{
if(strcmp(p->data.num,c)==0)
{
ok=true;
break;
}
p=p->next;
}
if(ok)
{
cout<<endl<<" 查找成功!"<<endl;
cout<<"学号:";
cout<<p->data.num<<endl;
cout<<"姓名:";
cout<<p->data.name<<endl;
cout<<"生日:";
cout<<p->data.bir<<endl;
cout<<"性别:";
cout<<p->data.sex<<endl;
cout<<"身体状况:";
cout<<p->data.statue<<endl<<endl;
}
else
{
cout<<endl<<" <<<<<<<<<<<<<<<<<<<<<<对不起!学生不存在!>>>>>>>>>>>>>>>>>>>>>>"<<endl;
}
};
//插入函数
void insert(Telem a[],int n)
{
Node *p,*q;
p=head;
while(p->next!=NULL)
p=p->next;
for(int i=1;i<=n;i++)
{
q=new Node;
q->data=a[i];
p->next=q;
p=q;
}
p->next=NULL;
size+=n;
cout<<endl<<" 插入成功!"<<endl;
};
//删除函数
void del(char *c)
{
if(empt())
{
cout<<endl<<" <<<<<<<<<<<<<<<<<<<<<<对不起!学生不存在!>>>>>>>>>>>>>>>>>>>>>>"<<endl;
return ;
}
Node *p,*q;
p=head;
bool ok=false;
while(p->next!=NULL)
{
q=p->next;//cout<<"!"<<q->data.num<<endl;
if(strcmp(q->data.num,c)==0)
{
ok=true;
break;
}
p=p->next;
}
if(ok)
{
cout<<endl<<" 删除成功!"<<endl;
if(size==2)
{
if(q->next->next==NULL)
p->next=q->next;
else
p->next=NULL;
}
else
{
p->next=q->next;
}
size--;
}
else
cout<<endl<<" <<<<<<<<<<<<<<<<<<<<<<对不起!学生不存在!>>>>>>>>>>>>>>>>>>>>>>"<<endl;
};
//打印函数
void print()
{
if(empt())
{
cout<<endl<<" <<<<<<<<<<<<<<<<<<<<<<对不起!学生不存在!>>>>>>>>>>>>>>>>>>>>>>"<<endl;
return ;
}
Node *p;
p=head->next;
int i=1;
while(p!=NULL)
{
cout<<" 学生"<<i<<":"<<endl;
cout<<"学号:";
cout<<p->data.num<<endl;
cout<<"姓名:";
cout<<p->data.name<<endl;
cout<<"生日:";
cout<<p->data.bir<<endl;
cout<<"性别:";
cout<<p->data.sex<<endl;
cout<<"身体状况:";
cout<<p->data.statue<<endl<<endl;
p=p->next;
i++;
}
};
//打印到文件
void print_file()
{
FILE *file=fopen("b.txt","w");
if(file)
{
if(empt())
fprintf(file," <<<<<<<<<<<<<<<<<<<<<<对不起!学生不存在!>>>>>>>>>>>>>>>>>>>>>>\n");
else
{
Node *p;
p=head->next;
int i=1;
while(p!=NULL)
{
fprintf(file," 学生%d:\n学号:%s\n姓名:%s\n生日:%s\n性别:%s\n身体状况:%s\n\n",i++,p->data.num,p->data.name,p->data.bir,p->data.sex,p->data.statue);
p=p->next;
}
fclose(file);
}
cout<<endl<<" 打印成功!"<<endl;
}
else
cout<<endl<<" 打开文件失败!"<<endl;
};
};
//从文件中读取
int scanf_file()
{
FILE *f;
int i;
int n;
if(f=fopen("a.txt","r"))
{
cout<<endl<<" 读取成功!请按①建表!"<<endl;
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)fscanf(f,"%s %s %s %s %s",b[i].num,b[i].name,b[i].bir,b[i].sex,b[i].statue);
}
else printf(" \n无法打开文件!");
fclose(f);
return n;
}
//主函数
int main()
{
int k,i,kk;
int n=0;
cout<<" <<<<<<<<<<<<<<欢迎来到学生健康情况管理系统>>>>>>>>>>>>>>"<<endl;
cout<<" 第一次使用请输入人数和学生基本情况"<<endl;
cout<<" 【手动输入请按1 , 直接进菜单文件读入请按2】"<<endl;
cin>>kk;
if(kk==1)
{
cout<<"输入人数:";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"输入学号:";
cin>>b[i].num;
cout<<"输入姓名:";
cin>>b[i].name;
cout<<"输入生日:";
cin>>b[i].bir;
cout<<"输入性别:";
cin>>b[i].sex;
cout<<"输入身体状况:";
cin>>b[i].statue;
cout<<endl;
}
}
LinkList stud(NULL,0);
while(1)
{
cout<<" --------------------------------------------------------------------------"<<endl;
cout<<" -- ①.新建学生健康表 | ②.向学生健康表插入学生信息 --"<<endl;
cout<<" --------------------------------------------------------------------------"<<endl;
cout<<" -- ③.删除学生信息 | ④.从文件中读取健康表信息 --"<<endl;
cout<<" --------------------------------------------------------------------------"<<endl;
cout<<" -- ⑤.向文件写入学生健康表信息 | ⑥.查询学生信息(按学生学号来进行查找) --"<<endl;
cout<<" --------------------------------------------------------------------------"<<endl;
cout<<" -- ⑦.在屏幕中输出全部学生信息 | ⑧.清空系统 --"<<endl;
cout<<" --------------------------------------------------------------------------"<<endl;
cout<<" -- ⑨.退出 --"<<endl;
cout<<" --------------------------------------------------------------------------"<<endl;
cin>>k;
switch(k){
case 1: stud.init(b,n);
break;
case 2: int m;
cout<<"请输入插入人数:";
cin>>m;
for(i=0;i<m;i++)
{
cout<<"输入学号:";
cin>>tmp[i].num;
cout<<"输入姓名:";
cin>>tmp[i].name;
cout<<"输入生日:";
cin>>tmp[i].bir;
cout<<"输入性别:";
cin>>tmp[i].sex;
cout<<"输入身体状况:";
cin>>tmp[i].statue;
}
stud.insert(tmp,m);
break;
case 3: if(stud.empt())
cout<<endl<<" <<<<<<<<<<<<<<<<<<<<<<对不起!学生不存在!>>>>>>>>>>>>>>>>>>>>>>"<<endl;
else
{
char num[N];
cout<<"请输入学生学号:";
cin>>num;
stud.del(num);
break;
}
case 4: n=scanf_file();
break;
case 5: stud.print_file();
break;
case 6: if(stud.empt())
cout<<endl<<" <<<<<<<<<<<<<<<<<<<<<<对不起!学生不存在!>>>>>>>>>>>>>>>>>>>>>>"<<endl;
else
{
char num[N];
cout<<"请输入学生学号:"<<endl;
cin>>num;
stud.find(num);
}
break;
case 7: stud.print();
break;
case 8: stud.clear();
break;
case 9: return 0;
}
}
return 0;
}
实验
最新推荐文章于 2023-11-25 15:12:10 发布