关于C++链表类文件的写入与读取,出现-858993460
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
#include <list>
#include <algorithm>
#include <ctime>
using namespace std;
class Stu
{
private:
int num;
int grade;
string name;
string sex;
string birth;
string profession;
string adress;
public:
Stu(){}
~Stu(){}
void SetStu(int nnum, int ngrade, string nname, string nsex, string nbirth, string nprofession, string nadress)
{
num = nnum;
grade = ngrade;
name = nname;
sex = nsex;
birth = nbirth;
profession = nprofession;
adress = nadress;
}
int GetNum()
{
return num;
}
int GetGrade()
{
return grade;
}
string GetName()
{
return name;
}
string GetSex()
{
return sex;
}
string GetAdress()
{
return adress;
}
string GetProfession()
{
return profession;
}
string GetBirth()
{
return birth;
}
friend class List;
};
struct Node
{
Stu data;
Node *next;
};
class List
{
private:
Node *head;
public:
friend class Stu;
List(){ head = NULL; }
void AddList();
void DelList();
void ShowList();
void SaveList();
void LoadList();
void Search();
Node* GetHead(){ return head; }
};
void List::ShowList()
{
Node *current = head;
if (head == NULL)
{
cout << "没有学生信息!" << endl;
}
while (current!=NULL)
{
cout << current->data.GetNum();
cout << current->data.GetName();
cout << current->data.GetSex();
cout << current->data.GetBirth();
cout << current->data.GetProfession();
cout << current->data.GetGrade();
cout << current->data.GetAdress();
current = current->next;
cout << endl;
}
}
void List::AddList()
{
int n;
cout << "请输入新建学生个数:";
cin >> n;
Stu *ptr1 = new Stu[n];
Node *ptr2 = new Node[n];
int nnum, ngrade;
for (int i = 0; i<n; i++)
{
string nname, nsex, nbirth, nprofession, nadress;
Node *p, *s;
cout << "请输入学生姓名:";
cin >> nname;
cout << endl << "请输入学生学号:";
cin >> nnum;
cout << endl << "请输入学生性别:";
cin >> nsex;
cout << endl << "请输入学生英语成绩:";
cin >> ngrade;
cout << endl << "请输入学生生日:";
cin >> nbirth;
cout << endl << "请输入学生专业:";
cin >> nprofession;
cout << endl << "请输入学生住址:";
cin >> nadress;
ptr1[i].SetStu(nnum, ngrade, nname, nsex, nbirth, nprofession, nadress);
ptr2[i].data = ptr1[i];
s = (Node*)new(Node);
s->data = ptr1[i];
p = head;
if (head == NULL)
{
head = s;
s->next = NULL;
}
else
{
while (p->next!=NULL)
{
p = p->next;
}
{
p->next = s;
s->next = NULL;
}
}
}
delete[] ptr1;
delete[] ptr2;
}
void List::DelList()
{
int dnum;
cout << "请输入要删除学生的编号" << endl;
cin >> dnum;
Node *p, *q;
p = head;
if (p == NULL)
{
return;
}
if (p->data.num == dnum)
{
head = p->next;
delete p;
}
else
{
while (p->data.num != dnum&&p->next != NULL)
{
q = p;
p = p->next;
if (p->data.num == dnum)
{
q->next = p->next;
delete p;
}
}
}
}
void List::SaveList()
{
ofstream fList("Stu.txt", ios::out);
Node *p = head;
while (p)
{
fList << p->data.GetNum() << p->data.GetName() << p->data.GetSex() << p->data.GetGrade() << p->data.GetProfession() << p->data.GetAdress() << p->data.GetBirth();
p = p->next;
}
}
void List::LoadList()
{
ifstream fList("Stu.txt", ios::in);
if (!fList)
{
cerr << "open error!" << endl;
abort();
}
while (!fList.eof())
{
int tnum;
int tgrade;
string tname;
string tsex;
string tbirth;
string tprofession;
string tadress;
Node *p, *q;
if (head == NULL)
{
p = new Node();
fList >> tnum >> tname >>tsex >> tgrade >> tprofession >> tadress >> tbirth;
p->data.SetStu(tnum, tgrade, tname, tsex, tbirth, tprofession, tadress);
head = p;
head->next = NULL;
}
else
{
q = head;
p = new Node();
fList >> tnum >> tname >> tsex >> tgrade >> tprofession >> tadress >> tbirth;
p->data.SetStu(tnum, tgrade, tname, tsex, tbirth, tprofession, tadress);
while (q->next != NULL)
{
q = q->next;
}
q->next = p;
p->next = NULL;
}
}
}
void menu()
{
cout << endl;
cout << "\t\t***********************************************" << endl;
cout << "\t\t** **" << endl;
cout << "\t\t** 学生信息管理系统主菜单 **" << endl;
cout << "\t\t** **" << endl;
cout << "\t\t** 1. 新增学生信息 **" << endl;
cout << "\t\t** 2. 删除学生信息 **" << endl;
cout << "\t\t** 3. 导入学生信息 **" << endl;
cout << "\t\t** 4. 学生信息搜索(按姓名) **" << endl;
cout << "\t\t** 5. 学生信息统计 **" << endl;
cout << "\t\t** 6. 按英语成绩排序 **" << endl;
cout << "\t\t** 7. 学生信息保存 **" << endl;
cout << "\t\t** 8. 显示学生信息 **" << endl;
cout << "\t\t** 0. 退出 **" << endl;
cout << "\t\t** **" << endl;
cout << "\t\t***********************************************" << endl;
cout << endl;
}
void domain()//主菜单函数实现
{
List S;
while (1)
{
system("cls");
menu();
cout << "请选择数字编号1~8" << endl;
int i1;
cin >> i1;
while (!(i1 >= 0 && i1 <= 8))
{
cout << "输入有误请重新输入" << endl;
cin >> i1;
}
switch (i1)
{
case 1:S.AddList(); break;
case 2:S.DelList(); break;
case 3:S.LoadList(); break;
//case 4:S.Search(); break;
//case 5:Sl.Statistic(); break;
//case 7:Sl.Sort(); break;
case 7:S.SaveList(); break;
case 8:S.ShowList(); break;
case 0:cout << "系统退出" << endl; exit(0);
default:break;
}
cout << "是否返回主菜单? Y/N" << endl;
string p;
cin >> p;
if (p == "n" || p == "N")
{
cout << "系统退出" << endl;
exit(0);
}
getchar();
}
}
int main()
{
menu();
domain();
return 0;
}
...全文
相关推荐
c++ 文件读取,链表操作例子
总结起来,C++中的文件读取与链表操作是程序设计中常用的技术。理解如何正确使用`fstream`进行文件操作,以及如何创建和管理链表,对于开发复杂的数据处理和文件处理应用程序至关重要。
文件读写入链表.zip_C++链表_数据结构_文件读写_读链表_链表读取文本
在C++编程中,链表是一种非常重要的数据结构,它在处理动态数据集合时具有很高的灵活性。本项目涉及的核心知识点是使用C++实现链表,并结合文件操作将数据读入链表,以及从链表中读取数据写入文件。
c实现学生管理系统(链表和文件读取写入)
本文将详细介绍如何使用C语言构建一个基于链表的学生管理系统,并涉及到文件的读取和写入操作。首先,我们要理解链表这一数据结构。
c++实现链表删除.cpp
c++实现链表删除.cpp
链表实现学生信息的存储C++
**文件读写操作**:读取文件中的学生信息到链表,或将链表中的信息写入文件。这通常涉及序列化和反序列化过程,如使用`fstream`库进行读写。


