⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usestud.cpp

📁 学生管理系统
💻 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 + -