c++学生成绩管理系统 文件操作

来源:互联网 发布:淘宝网珀莱雅套装 编辑:程序博客网 时间:2024/06/04 23:35

我写了两个类,一个老师类,一个学生类,老师要输入密码,才能打开学生成绩的文件,老师的名字和密码也用了一个文件来单独储存。同时,在密码输入的时候,我采取对账号信息的保密,输入密码时会显示*号。

student头文件

#pragma once#include <string>#include <iostream>using namespace std;class Student{public:Student() :num(0),name(""),score(0) {}Student(int num,string name,double score);~Student();void setStudent(int n,string nam,double s);void showStudent();friend class Teacher;private:int num;string name;double score;};

teacher.h

#pragma once#include <string>#include <iostream>#include "student.h"using namespace std;const int upNum = 1000;class Teacher{public:Teacher();    virtual~Teacher();void work();void displayStudent();void insert();void deleteStudent();void searchStudent();void saveStudent();private:int N;//用户数目Student students[upNum];//student()};int pass();int chooseInMenu();int inputPassword();

student.cpp

#include"student.h"#include"teacher.h"Student::Student(int num,string name,double score):num(num),name(name),score(score){}Student::~Student(){}void Student::setStudent(int n, string nam, double s){this->num = n;this->name = nam;this->score = s;}void Student::showStudent(){cout << num << "           " << name << "         " << score << endl;}

teacher.cpp


#include "teacher.h"#include<iostream>#include<fstream>#include<cstdlib>#include<string>#include<ctype.h>using namespace std;Teacher::Teacher(){ifstream infile("student.txt", ios::in);if (!infile){cerr << "open error" << endl;exit(1);}int i = 0;int n;string nam;double sco;while (infile >> n >> nam >> sco ){students[i].setStudent(n,nam,sco);i++;}N = i;infile.close();}Teacher::~Teacher(){}void Teacher::saveStudent(){ofstream outfile("student.txt", ios::out);if (!outfile){cerr << "open error" << endl;exit(1);}int i;int k = N;for (i = 0; i < k; ++i){outfile << students[i].num << " ";outfile << students[i].name << " ";outfile << students[i].score << " ";}getchar();getchar();outfile.close();}void Teacher::work(){int iChoice;int j = 0;while (1){iChoice = chooseInMenu();switch (iChoice){case 1:insert();break;case 2:deleteStudent();break;case 3:searchStudent();break;case 4:displayStudent();break;case 0:j = 1;break;default:break;}if (j == 1)break;}}void Teacher::displayStudent(){int i;cout << "学号" << "       " << "姓名" << "       " << "操作系统成绩" << endl;for (i = 0; i < N; i++){students[i].showStudent();}}void Teacher::insert(){int n;string nam;double sco;cout << "请输入学号:";cin >> n;cout << endl;cout << "请输入名字:";cin >> nam;cout << "请输入操作系统成绩:";cin >> sco;students[N].setStudent(n, nam, sco);N++;}void Teacher::deleteStudent(){int i = 0;string nam;int j = -1;cout << "请输入要删除人的名字:";cin >> nam;for (i = 0; i < N; i++){if (students[i].name == nam){students[i].showStudent();j = i;}}if (j == -1){cout << "查无此人:" << endl;}else {for (i = j; j < N; j++){students[i].name = students[i + 1].name;students[i].num = students[i + 1].num;students[i].score = students[i + 1].score;}N--;}}void Teacher::searchStudent(){int i = 0;string nam;int j = -1;cout << "请输入要查找人的名字:";cin >> nam;for (i = 0; i < N; i++){if (students[i].name == nam){students[i].showStudent();j = i;}}}

work.cpp


#include<iostream>#include<fstream>#include<conio.h>#include<cstdlib>#include<cstring>#include<ctype.h>#include"teacher.h"using namespace std;int pass()//验证用户密码,正确返回1,错误返回0{char sNameInfile[20];char sPassInfile[20];ifstream infile("teacher.txt", ios::in);if (!infile){cout << "password file cannot open!" << endl;system("pause");exit(1);}infile >> sNameInfile >> sPassInfile;infile.close();char sName[20];char sPass[20];char ch;int iTry = 3;int right = 0;do{cout << "请输入您的姓名:";cin >> sName;cout << "请输入密码:";int i = 0;while ((ch = getch()) != '\r'){sPass[i++] = ch;putchar('*');}sPass[i] = '\0';fflush(stdin);cout << endl;if (strcmp(sPass, sPassInfile) == 0 && strcmp(sName, sNameInfile) == 0){right = 1;break;}else{iTry--;if (iTry < 0)cout << "对不起,您已输入超过三次" << endl;}} while (iTry);return right;}int chooseInMenu(){int i;while (1){cout << endl;cout << "+------------------------------------+" << endl;cout << "+      1.插入信息        2.删除信息    +" << endl;cout << "+      3.查找信息        4.显示信息    +" << endl;cout << "+-------------------------------------+" << endl;cout << "+                       0.退出        +" << endl;cout << "+------------------------------------+" << endl;cout << "请输入操作指令:";cin >> i;if (i >= 0 && i <= 9)break;elsecout << "请重新输入" << endl;}return i;}int inputPassword(){char ch;int iPass = 0;int i;while (1){for (i = 0; i < 6; i++){ch = getch();putchar('*');if (isdigit(ch))iPass = iPass * 10 + (ch - '0');else{iPass = 0;break;}}fflush(stdin);cout << endl;if (iPass == 0){cout << "密码要求全为数字" << endl;cout << "请重新输入" << endl;}elsebreak;}return iPass;}


main.cpp

#include<iostream>#include"teacher.h"using namespace std;int main(){cout << "+-------------------------------------------+" << endl;cout << "               学生成绩管理系统               " << endl;cout << "+-------------------------------------------+" << endl;Teacher t;if (pass()){Teacher t;t.work();t.saveStudent();}}


最近在自己看C++,之前对C语言比较熟悉,c++和没学没什莫区别,刚好看到友元,就用了友元类,因为我是练手,所以无所谓,但如果以后做东西,还是不太提倡友元,毕竟破坏了C++的封装性,这是小哥我第二个C++程序,程序很low,没啥水平,不过,以后会慢慢变好~喜欢我程序的同学欢迎点一波关注  ^_^

0 0
原创粉丝点击