📄 usestud.cpp
字号:
#include <iostream>
#include <fstream>
#include "student.h"
using namespace std;
enum test{add, del, find, sort, print, quit}; //枚举常量
void showmenu();
void findnumber(list <student> &stu);
void delstud(list <student> &stu);
void stumessagein(list <student> &stu);
void main()
{
list <student> stu; //定义一个链表stu
char ch;
fstream file("student.txt",ios_base::in|ios_base::out);//以读写方式打开
if(!file.get(ch)) //如果读入是空即文件中没有学生信息
{
cout << "没有学生信息,请输入,以空行结束." << endl;
cout << "输入姓名:";
stumessagein(stu); //从键盘输入学生信息
}
else //文件中存在学生信息
{
file.close();
ifstream fin("student.txt"); //以只读方式打开文件
student stud;
fin >> stud;
node<student> *p; //叠代器
char *nam = stud.getname();
while(nam[0] != '\0')
{
p = stu.creatnode(stud); //创建结点
stu.insertfront(p); //将结点插入链表
fin >> stud;
nam = stud.getname();
}
fin.close();
}
showmenu(); //显示输入提示
int chi;
cin >> chi;
cin.get();
while(chi >= 0 && chi <= 4)
{
switch(chi)
{
case add:stumessagein(stu); //添加
break;
case del:delstud(stu); //删除
break;
case find:findnumber(stu); //查找
break;
case sort:stu.sortby();
break;
case print:stu.printlist(); //打印
break;
default:break;
}
showmenu();
cin >> chi;
cin.get();
}
//写入文件;
ofstream fout("student.txt",ios_base::out | ios_base::trunc);
node<student>* pd = stu.begin();
while(pd != NULL)
{
fout << pd->info;
pd = pd->next;
}
}
void showmenu() //菜单显示
{
cout <<"please enter 0,1,2,3,4,5"<<endl
<<"0) 添加 1) 删除"<<endl
<<"2) 查找 3) 排序"<< endl
<<"4) 打印 5) 退出"<<endl;
}
void findnumber(list <student> &stu) //查找学号
{
cout << "输入要查找学生的学号:";
string num;
cin >> num;
node<student> *p = stu.find(num);
if(p != NULL)
cout << p->info;
else
cout << "没找到该学生.";
}
void delstud(list <student> &stu) //删除学生信息
{
cout << "输入要查找学生的学号:";
string num;
cin >> num;
node<student> *p = stu.find(num);
if (p == NULL)
{
cout << "该学生不存在" << endl;
}
else
{
stu.deletenode(p);
student::reducetotal();
}
}
void stumessagein(list <student> &stu) //学生信息输入
{
node<student> *p;
char nam[20];
cout << "请输入学生姓名:" << endl;
cin.getline(nam,20);
cout << nam << endl;
while(cin && nam[0] != '\0') //输入成功并且名字不是空的时候
{
cout << "输入性别:";
char se;
cin >>se;
getchar();
cout << "输入班级:";
int cla;
cin >> cla;
getchar();
cin.clear();
cout << "输入学号:";
string num;
cin >> num;
while(cin) //确保无重复学号
{
p = stu.begin();
while(p != NULL && num != p->info.getnumber())
{
p = p->next;
}
if(p != NULL)
{
cout << "学号重复重新输入";
cin >> num;
}
break;
}
getchar();
cout << "输入成绩:";
float sco;
cin >> sco;
while(cin) //确保成绩满足要求
{
if(sco > 100 || sco < 10)
{
cout << "输入错误,成绩必需在10到100间.重新输入:";
cin >> sco;
}
break;
}
student data(nam, se, cla, num,sco); //创建学生对象,准备为结点初始化.
p = stu.creatnode(data); //建立新结点.
stu.insertfront(p); //将新结点前向插入
student::addtotal();
getchar();
cout << "输入姓名:";
cin.getline(nam, 20);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -