我在所有函数的外面定义了一个,vectorstu(N),然后想把它用在“修改学生信息”的函数中,不知道可以可以,但是编译之后有问题。
#include <iostream>
#include <string>
#include<stdlib.h>
#include <fstream>
#include <iomanip> //包含setw函数
#include<vector> //运用vector创建数组对象
const int N = 1000; //学生的人数
//void menu(); //输出菜单
//void writeFile(); //写入学生信息
//void readFile(); //读取学生信息
//void increase(); //增加学生信息
//void display(); //显示学生信息
//void modify(); //修改学生信息
//void search(); //查询学生信息
//void dele(); //删除学生信息
//void sort(); //排序学生信息
//void exit(); //退出
static int n = 0; //n为学生总人数,t控制循环
int t = 1;
using namespace std;
class Student { //创建学生类
public:
string name; //姓名
string gender; //性别
string num; //学号
int grade; //年级
string college; //学院
string system; //系
string stuclass; //班级
string dorm; //宿舍
string home; //籍贯
string phonenumber; //电话号码
string English; //英语成绩
string Maths; //数学成绩
string Program; //编程成绩
Student()
{
}
// Student(string name, string gender, string num, int grade, string college, string system, string stuclass, string dorm,string home, string phonenumber, int English, int Maths, int Program)
//{
// this->name = name;
// this->gender = gender;
// this->num = num;
// this->grade = grade;
// this->college = college;
// this->system = system;
// this->stuclass = stuclass;
// this->dorm = dorm;
// this->home= home;
// this->phonenumber = phonenumber;
// this->English = English;
// this->Maths = Maths;
// this->Program = Program;
//}
~Student()
{}
void show1() //输出信息
{
cout << left << setw(10) << name;
cout << left << setw(6) << gender;
cout << left << setw(12) << num;
cout << left << setw(6) << grade;
cout << left << setw(6) << college;
cout << left << setw(6) << system;
cout << left << setw(6) << stuclass;
cout << left << setw(6) << dorm;
cout << left << setw(6) << home;
cout << left << setw(20) << phonenumber;
cout << left << setw(6) << English;
cout << left << setw(6) << Maths;
cout << left << setw(6) << Program;
}
static void show2() //输出信息的名称
{
cout << left << setw(10) << "姓名";
cout << left << setw(6) << "性别";
cout << left << setw(12) << "学号";
cout << left << setw(6) << "年级";
cout << left << setw(6) << "院校";
cout << left << setw(6) << "系";
cout << left << setw(6) << "班级";
cout << left << setw(6) << "籍贯";
cout << left << setw(6) << "电话";
cout << left << setw(6) << "英语";
cout << left << setw(6) << "数学";
cout << left << setw(6) << "编程";
}
};
vector<Student>stu(N); //在所有函数的外面定义了
void menu() //输出菜单
{
printf("-----------------------------------------------------\n");
printf("---------------->>学生信息管理系统<<-----------------\n");
printf("--------------------->>主菜单<<----------------------\n");
printf("-----------------------------------------------------\n");
printf("* 1、增加学生信息 * 2、显示学生信息 *\n");
printf("-----------------------------------------------------\n");
printf("** 3、修改学生信息 * 4、查询学生信息 **\n");
printf("-----------------------------------------------------\n");
printf("** 5、删除学生信息 * 6、排序学生信息 **\n");
printf("-----------------------------------------------------\n");
printf("** 7、退出系统 * **\n");
printf("-----------------------------------------------------\n");
}
void writeFile(vector<Student> &stu) //写入学生信息
{
ofstream ofs;
ofs.open("D:\\王晴\\学习\\大二\\面向对象的程序设计课程实践\\学生管理系统\\学生信息.txt", ios::out);
for (int i = n; i < stu.size()+n; i++)
{
ofs << stu[i].name << " " << stu[i].gender << " " << stu[i].num << " "
<< stu[i].grade << " " << stu[i].college << " " << stu[i].system << " "<<stu[i].stuclass<<" "
<< stu[i].dorm << " " << stu[i].English << stu[i].Maths << stu[i].Program << endl;
}
ofs.close();
}
void readFile(vector<Student> &stu) //读取学生信息
{
ifstream ifs; //创建流对象
ifs.open("D:\\王晴\\学习\\大二\\面向对象的程序设计课程实践\\学生管理系统\\学生信息.txt", ios::in); //打开文件
if (!ifs.is_open()) //判断文件是否打开成功
{
cout << "文件打开失败" << endl;
return;
}
char c;
while ((c = ifs.get())!= EOF)
{
cout << c;
}
ifs.close();
}
void increase() //增加学生信息
{
cout << "----------------欢迎来到增加学生信息-----------------" << endl;
cout << "请输入待添加的学生人数:" << endl;
int x; //等待添加的学生人数
cin >> x;
int flag, i = n, j;
vector <Student> stu(x);
if (x > 0)
{
do
{
flag = 1;
while (flag==1) //判断学号是否重复
{
flag = 0;
printf("请输入第%d位学生的学号:\n", i + 1);
cin >> stu[i].num;
for (j = 0; j < i; j++)
{
if (stu[i].num == stu[j].num)
{
cout << "该学号已经存在,请重新输入!" << endl;
flag = 1;
break;
}
}
}
printf("请输入第%d位学生姓名 性别 学号 年级 学院 系 班级 宿舍 籍贯 电话 英语成绩 数学成绩 编程成绩:\n", i + 1);
cin >> stu[i].name >> stu[i].gender >> stu[i].num >> stu[i].grade >> stu[i].college
>> stu[i].system >>stu[i].stuclass >> stu[i].dorm >>stu[i].home>>stu[i].phonenumber
>> stu[i].English >> stu[i].Maths >> stu[i].Program;
i++;
} while (i < x + n);
writeFile(stu);
n += x;
cout << "添加成功!" << endl;
system("pause");
}
}
void display() //显示学生信息
{
if (n == 0)
printf("您好,现在暂无学生信息,请先添加学生信息!\n");
else
{
printf("现在共有%d名学生\n", n);
vector<Student>stu(n);
readFile(stu);
}
}
void modify() //修改学生信息
{
string p; //要修改的学生学号
int h;
cout << "请输入需要修改的学生学号:" << endl;
cin >> p;
ofstream ofs;
ofs.open("D:\\王晴\\学习\\大二\\面向对象的程序设计课程实践\\学生管理系统\\学生信息.txt", ios::out);
for (h = 0; h < n; h++)
{
if (p == stu[h].num)
{
cout << "请输入修改后的信息:" << endl;
cin >> stu[h].name >> stu[h].gender >> stu[h].num >> stu[h].grade >> stu[h].college
>> stu[h].system >> stu[h].stuclass >> stu[h].dorm >> stu[h].home >> stu[h].phonenumber
>> stu[h].English >> stu[h].Maths >> stu[h].Program;
ofs << stu[h].name << " " << stu[h].gender << " " << stu[h].num << " "
<< stu[h].grade << " " << stu[h].college << " " << stu[h].system << " " << stu[h].stuclass << " "
<< stu[h].dorm << " " << stu[h].English << stu[h].Maths << stu[h].Program << endl;
ofs.close();
}
break;
}
}
//void search(); //查询学生信息
//void dele(); //删除学生信息
//void sort(); //排序学生信息
//void exit(); //退出
//主函数
int main()
{
int number;
while (1)
{
menu();
printf("请输入菜单编号:");
cin >> number;
switch (number)
{
case 1:increase(); break; //增加学生信息
case 2:display(); break; //显示当前信息
case 3:modify(); break; //修改学生信息
//case 4:search(); break; //查询学生信息
//case 5:dele(); break; //删除学生信息
//case 6:sort(); break; //排序学生信息
//case 7:exit(0); break; //退出
default:printf("输入有误!");
}
}
}