• 2020-07-07日报博客


    2020-07-07日报博客

    1.今天完成的事情:

    • 学习Java,听黑马系列的视频教程前30集。

    • 完成面向对象程序设计小学期第八个练习:学生成绩管理程序(链表)

    • 代码如下:

      #include<iostream>
      #include<fstream>
      #include<iomanip>
      using namespace std;
      
      const int M = 1024;
      
      struct StudentInfo
      {
      public:
      	long studentId;
      	string name;
      	float math;
      	float Chinese;
      	float English;
      
      	StudentInfo* next = NULL;
      };
      class StudentManage {
      public:
      	StudentInfo* head = new StudentInfo;
      	string createFile();
      	string importFile();
      	void show();
      	void inputInfo();
      	void deleteInfo();
      	void changeInfo();
      	void findInfo();
      	void summary(float sum[], float average[]);
      	void sort(float sum[]);
      	void exportFile();
      	void insert();
      };
      
      string StudentManage::createFile()
      {
      	string fileName;
      	cout << "请输入文件名:";
      	cin >> fileName;
      	ofstream outfile(fileName, ios::out);
      	if (!outfile)
      	{
      		cerr << "创建失败!" << endl;
      	}
      	outfile.close();
      	return fileName;
      }
      string StudentManage::importFile() {
      	string fileName;
      	cout << "请输入文件名: ";
      	cin >> fileName;
      	ifstream infile(fileName, ios::in || ios::_Noreplace);
      	if (!infile)
      	{
      		cerr << "打开失败!" << endl;
      	}
      
      	head->next = NULL;
      	StudentInfo* pre = this->head;
      	while (!infile.eof()) {
      		StudentInfo* p = new StudentInfo;
      		infile >> p->studentId >> p->name >> p->math >> p->Chinese >> p->English;
      		if (infile.eof()) {
      			p->next = NULL;
      			break;
      		}
      		pre->next = p;
      		pre = p;
      		p->next = NULL;
      	}
      
      	this->show();
      	infile.close();
      	return fileName;
      }
      void StudentManage::show() {
      	cout << setw(10) << setiosflags(ios::left) << "学号  |" << setw(10) << setiosflags(ios::left) << "姓名  |" << setw(10) << setiosflags(ios::left) << "数学  |" << setw(10) << setiosflags(ios::left) << "语文  |" << setw(10) << setiosflags(ios::left) << "英语" << endl;
      	StudentInfo* p = this->head->next;
      	while (true) {
      		if (p == NULL || p->math < 0 || p->math > 100)
      			break;
      		cout << setw(10) << setiosflags(ios::left) << p->studentId << setw(10) << setiosflags(ios::left) << p->name << setw(10) << setiosflags(ios::left) << p->math << setw(10) << setiosflags(ios::left) << p->Chinese << setw(10) << setiosflags(ios::left) << p->English << endl;
      		if (p->next == NULL)
      			break;
      		p = p->next;
      	}
      }
      void StudentManage::inputInfo() {
      	int n;
      	cout << "请输入需要输入的人数:";
      	cin >> n;
      	cout << "开始输入学生信息:" << endl;
      	StudentInfo* pEnd = this->head;
      	while (true) {
      		pEnd = pEnd->next;
      		if (pEnd->next == NULL || pEnd->next->math < 0 || pEnd->next->math> 100)
      			break;
      	}
      	StudentInfo* pre = pEnd;
      	for (int i = 0; i < n; i++)
      	{
      		StudentInfo* p = new StudentInfo;
      		cin >> p->studentId >> p->name >> p->math >> p->Chinese >> p->English;
      		pre->next = p;
      		pre = p;
      		p->next = NULL;
      	}
      }
      void StudentManage::deleteInfo() {
      	if (head->next == NULL) {
      		cout << "数据未录入!" << endl;
      		return;
      	}
      	long id;
      	cout << "请输入学生学号: " << endl;
      	cin >> id;
      	StudentInfo* p = this->head->next;
      	while (true) {
      		if (p == NULL || p->math < 0 || p->math > 100)
      			break;
      		if (p->next->studentId == id) {
      			p->next = p->next->next;
      		}
      		p = p->next;
      	}
      }
      void StudentManage::changeInfo() {
      	if (head->next == NULL) {
      		cout << "数据未录入!" << endl;
      		return;
      	}
      	long id;
      	cout << "请输入学生学号: " << endl;
      	cin >> id;
      	StudentInfo* p = this->head->next;
      	while (true) {
      		if (p == NULL || p->math < 0 || p->math > 100)
      			break;
      		if (p->studentId == id) {
      			cout << "请重新输入该学生信息:" << endl;
      			cout << setw(10) << setiosflags(ios::left) << "学号  |" << setw(10) << setiosflags(ios::left) << "姓名  |" << setw(10) << setiosflags(ios::left) << "数学  |" << setw(10) << setiosflags(ios::left) << "语文  |" << setw(10) << setiosflags(ios::left) << "英语" << endl;
      			cin >> p->studentId >> p->name >> p->math >> p->Chinese >> p->English;
      		}
      		p = p->next;
      	}
      }
      void StudentManage::findInfo() {
      	if (head->next == NULL) {
      		cout << "数据未录入!" << endl;
      		return;
      	}
      	long id;
      	cout << "请输入学生学号: " << endl;
      	cin >> id;
      	StudentInfo* p = this->head->next;
      	while (true) {
      		if (p == NULL || p->math < 0 || p->math > 100)
      			break;
      		if (p->studentId == id) {
      			cout << "该生信息为:" << endl;
      			cout << setw(10) << setiosflags(ios::left) << "学号  |" << setw(10) << setiosflags(ios::left) << "姓名  |" << setw(10) << setiosflags(ios::left) << "数学  |" << setw(10) << setiosflags(ios::left) << "语文  |" << setw(10) << setiosflags(ios::left) << "英语" << endl;
      			cout << setw(10) << setiosflags(ios::left) << p->studentId << setw(10) << setiosflags(ios::left) << p->name << setw(10) << setiosflags(ios::left) << p->math << setw(10) << setiosflags(ios::left) << p->Chinese << setw(10) << setiosflags(ios::left) << p->English << endl;
      		}
      		p = p->next;
      	}
      }
      void StudentManage::summary(float sum[M], float average[M]) {
      	if (head->next == NULL) {
      		cout << "数据未录入!" << endl;
      		return;
      	}
      	StudentInfo* p = this->head->next;
      	int i = 0;
      	cout << setw(10) << setiosflags(ios::left) << "学号  |" << setw(10) << setiosflags(ios::left) << "姓名  |" << setw(10) << setiosflags(ios::left) << "数学  |" << setw(10) << setiosflags(ios::left) << "语文  |" << setw(10) << setiosflags(ios::left) << "英语  |" << "总分  |" << "平均分" << endl;
      	while (true) {
      		if (p == NULL || p->math < 0 || p->math > 100)
      			break;
      
      		sum[i] = p->math + p->Chinese + p->English;
      		average[i] = sum[i] / 3.0;
      
      		cout << setw(10) << setiosflags(ios::left) << p->studentId << setw(10) << setiosflags(ios::left) << p->name << setw(10) << setiosflags(ios::left) << p->math << setw(10) << setiosflags(ios::left) << p->Chinese << setw(10) << setiosflags(ios::left) << p->English << setw(10) << setiosflags(ios::left) << sum[i] << average[i] << endl;
      
      		p = p->next;
      	}
      }
      void Swap(StudentInfo& a, StudentInfo& b) {
      	StudentInfo t;
      	t.studentId = a.studentId;
      	t.name = a.name;
      	t.math = a.math;
      	t.Chinese = a.Chinese;
      	t.English = a.English;
      
      	a.studentId = b.studentId;
      	a.name = b.name;
      	a.math = b.math;
      	a.Chinese = b.Chinese;
      	a.English = b.English;
      
      	b.studentId = t.studentId;
      	b.name = t.name;
      	b.math = t.math;
      	b.Chinese = t.Chinese;
      	b.English = t.English;
      }
      void StudentManage::sort(float sum[]) {
      	if (head->next == NULL) {
      		cout << "数据未录入!" << endl;
      		return;
      	}
      	int a, N = 0;
      	StudentInfo* p = this->head->next;
      	while (true) {
      		if (p == NULL || p->math < 0 || p->math > 100)
      			break;
      		N++;
      		p = p->next;
      	}
      	cout << N << endl;
      	cout << "请选择按学号还是按总分排序(1.学号 2.总分):";
      	cin >> a;
      	if (a == 1) {
      		for (int i = 1; i < N - 1; i++)
      		{
      			StudentInfo* p = NULL;
      			StudentInfo* q = NULL;
      			StudentInfo* t = NULL;
      
      			if (this->head == NULL || (this->head)->next == NULL)
      			{
      				return;
      			}
      
      			for (p = this->head; p != NULL; p = p->next)
      			{
      				t = p;
      
      				for (q = p->next; q != NULL; q = q->next)
      				{
      					if (q->studentId < t->studentId)
      					{
      						t = q;
      					}
      				}
      
      				if (t != p)
      				{
      					Swap(*t, *p);
      				}
      			}
      		}
      		this->show();
      	}
      	if (a == 2) {
      		StudentInfo* p1 = NULL;
      		StudentInfo* q = NULL;
      		StudentInfo* t = NULL;
      
      		if (this->head == NULL || (this->head)->next == NULL)
      		{
      			return;
      		}
      
      		for (p1 = this->head->next; p1 != NULL; p1 = p1->next)
      		{
      			for (q = this->head->next; q->next != NULL; q = q->next)
      			{
      				if ((q->math + q->Chinese + q->English) < (q->next->math + q->next->Chinese + q->next->English))
      				{
      					Swap(*q, *q->next);
      				}
      			}
      		}
      
      		StudentInfo* p = this->head->next;
      		cout << setw(10) << setiosflags(ios::left) << "学号  |" << setw(10) << setiosflags(ios::left) << "姓名  |" << setw(10) << setiosflags(ios::left) << "数学  |" << setw(10) << setiosflags(ios::left) << "语文  |" << setw(10) << setiosflags(ios::left) << "英语  |" << "总分" << endl;
      		while (true) {
      			if (p == NULL || p->math < 0 || p->math > 100)
      				break;
      
      			double sum = p->math + p->Chinese + p->English;
      
      			cout << setw(10) << setiosflags(ios::left) << p->studentId << setw(10) << setiosflags(ios::left) << p->name << setw(10) << setiosflags(ios::left) << p->math << setw(10) << setiosflags(ios::left) << p->Chinese << setw(10) << setiosflags(ios::left) << p->English << setw(10) << setiosflags(ios::left) << sum << endl;
      
      			p = p->next;
      		}
      	}
      	if (a != 1 && a != 2) {
      		cout << "不存在该选项!" << endl;
      	}
      }
      void StudentManage::exportFile() {
      	string fileName;
      	cout << "请输入文件名:";
      	cin >> fileName;
      	ofstream outfile(fileName, ios::out);
      	if (!outfile)
      	{
      		cerr << "Open error!" << endl;
      		exit(1);
      	}
      
      	StudentInfo* p = this->head->next;
      	while (true) {
      		if (p == NULL || p->math < 0 || p->math > 100)
      			break;
      		outfile << setw(10) << setiosflags(ios::left) << p->studentId << setw(10) << setiosflags(ios::left) << p->name << setw(10) << setiosflags(ios::left) << p->math << setw(10) << setiosflags(ios::left) << p->Chinese << setw(10) << setiosflags(ios::left) << p->English << endl;
      		if (p->next == NULL)
      			break;
      		p = p->next;
      	}
      
      	outfile.close();
      	cout << "写入完成!" << endl;
      }
      void StudentManage::insert() {
      	int n, t, N;
      	cout << "请输入要插入的学生数n:";
      	cin >> n;
      	cout << "请输入位置:";
      	cin >> t;
      
      	StudentInfo* p = this->head->next;
      	for (int i = 0; i < t - 3; i++) {
      		if (p == NULL || p->next == NULL || p->math < 0 || p->math > 100)
      			break;
      		p = p->next;
      	}
      	for (int i = 0; i < n; i++) {
      		StudentInfo* t = p->next;
      		p->next = new StudentInfo;
      		cout << "请输入要插入学生的信息:" << endl;
      		cin >> p->next->studentId >> p->next->name >> p->next->math >> p->next->Chinese >> p->next->English;
      		p->next->next = t;
      
      		p = p->next;
      	}
      }
      
      int main() {
      	StudentManage classA;
      	string filename;
      	float sum[M], average[M];
      	int a;
      	cout << "学生成绩管理系统:
      1 创建
      2 导入
      3 显示
      4 输入
      5 删除
      6 修改
      7 查询
      8 汇总
      9 排序
      10 导出
      11 插入
      12 退出
      ";
      	while (true) {
      		cout << "请选择:";
      		cin >> a;
      		switch (a) {
      		case 1:filename = classA.createFile(); continue;
      		case 2:filename = classA.importFile(); continue;
      		case 3:classA.show(); continue;
      		case 4:classA.inputInfo(); continue;
      		case 5:classA.deleteInfo(); continue;
      		case 6:classA.changeInfo(); continue;
      		case 7:classA.findInfo(); continue;
      		case 8:classA.summary(sum, average); continue;
      		case 9:classA.sort(sum); continue;
      		case 10:classA.exportFile(); continue;
      		case 11:classA.insert(); continue;
      		case 12: {
      			exit(0);
      		}
      		default:cout << "不存在该选项!" << endl; continue;
      		}
      	}
      	return 0;
      }
      

    2.遇到的问题:

    • 链表的一些操作,如排序,已通过搜索引擎解决。

    3.明天的计划:

    • 继续完成小学期任务,继续学习Java。
  • 相关阅读:
    国内外DNS服务器地址列表
    MySQL语法大全_自己整理的学习笔记(摘抄)
    http代理和sock5代理有什么区别
    sql anywhere 网络连接
    ASCII码表_全_完整版
    libevent 编写问答服务器
    简单实现h264转ts
    libevent1.4 阅读记录三
    libevent1.4 阅读记录二
    nginx 学习
  • 原文地址:https://www.cnblogs.com/gongyunlong-blogs/p/13263721.html
Copyright © 2020-2023  润新知