最近开始入门C++了,在导师的指导下,让我先试着写一个学生信息管理系统,实现基本的增删改查,用C++实现,于是花了两三天写完一个,不过收获不太大吧,因为刚开始,还没有把C++的面向对象思想融入进去,相当于还是用C的面向过程来实现的,还得继续学习。
代码如下:
#include <iostream>
#include <iomanip>
#include <fstream>/*文件 */
#include <stdlib.h>/*cls */
#include <string> /*string字符 */
#include <cstring> /*strcmp函数等。 */
#define N 20 /*字符串变量长度,姓名、班级等 */
#define ARRAY 100 /*过程数组长度,账号密码数组等 */
using namespace std;
/*
by wangxiao
2021.6.22-24
C++入门练习
*/
char stu_file[20]="student.txt";/*学生信息储存文件 */
char user_file[20]="user.txt";/*用户账号密码储存文件 */
int login_UI();/*登录界面 */
int registe_UI();/*注册界面 */
bool registe_save(char *name,char *pwd);/*注册保存至user.txt */
bool check(char *name,char *pwd);/*登录检查 */
int index(char *name);/*主页 */
bool all_stu();/*展示所有学生信息 */
bool add_stu(int stu_id,char *stu_name,char *stu_class,int stu_grade);/*添加学生 */
bool select_stu(int type);/*查找学生 */
int gowhere(char *name);/*辅助页面 */
bool delete_student(int id);/*根据学号删除 */
void DelLineData(char* fileName, int lineNum);/*删除的核心 */
bool modify_student(int id);/*根据学号修改 */
void ModifyLineData(char* fileName, int lineNum, char* lineData);/*修改核心 */
/*首页 */
int main()
{
system("clear");
cout << setw(24) << "欢迎光临!" << endl;
cout << setw(12) << "1.登录" << setw(12) << "2.注册" << endl;
int num;
cout << "请选择登录或注册:";
cin >> num;
if(num==1)
login_UI();
if(num==2)
registe_UI();
else
return 0;
return 0;
}
/*登录界面 */
int login_UI()
{
char name[N],pwd[N];
system("clear");
cout << setw(24) << "欢迎登录!" << endl;
cout << setw(12) <<"账号:";
cin >> name;
cout << endl;
cout <<setw(12) <<"密码:";
cin >> pwd;
cout << endl;
if(check(name,pwd))
{
cout << "登录成功" <<endl;
index(name);
}
else{
cout << "登录失败,请重新登录"<<endl;
main();
}
}
/*注册界面 */
int registe_UI()
{
char name[N],pwd[N];
system("clear");
cout << setw(24) << "欢迎注册!" << endl;
cout << setw(12) <<"账号:";
cin >> name;
cout << endl;
cout <<setw(12) <<"密码:";
cin >> pwd;
cout << endl;
if(registe_save(name,pwd))
{
cout << "注册成功" <<endl;
main();
}
else{
cout << "注册失败,请重新注册"<<endl;
}
}
/*注册 */
bool registe_save(char *name,char *pwd)
{
ofstream outfile;
outfile.open(user_file,ios::out | ios::app);
if(outfile.fail())
{
cout << "用户数据文件打开失败"<<endl;
return false;
}
else{
outfile << name << setw(18) << pwd <<endl;
outfile.close();
return true;
}
}
/*检查输入的账号密码 */
bool check(char *name,char *pwd)
{
ifstream in(user_file);
if(!in) {
cerr<<"Can't open the file."<<endl;
return false;
}
string line;
string name_data[ARRAY];/*账号数组 */
string pwd_data[ARRAY];/*密码数组 */
int i=0,j=0,l=0;
while(in >> line)
{
if((l+1)%2==1)
{
name_data[i]=line;
i++;
}else
{
pwd_data[j]=line;
j++;
}
l++;
}
in.close();
for(i=0;i<ARRAY;i++)
{
if(name_data[i].compare(name)==0&&pwd_data[i].compare(pwd)==0)
{
return true;
}
}
return false;
}
/*展示所有学生信息 */
bool all_stu()
{
ifstream student;
student.open(stu_file,ios::out | ios::in);
string line;
cout <<"学号"<<"\t"<<"姓名"<<"\t"<<"班级"<<"\t"<<"成绩"<<endl;
while(getline(student,line))
cout << line<<endl;
student.close();
return true;
}
/*添加学生信息 */
bool add_stu(int stu_id,char *stu_name,char *stu_class,int stu_grade)
{
ofstream outfile;
outfile.open(stu_file,ios::out | ios::app);
if(outfile.fail())
{
cout << "学生信息文件打开失败"<<endl;
return false;
}else{
outfile << stu_id << "\t" << stu_name<<"\t"<<stu_class<<"\t"<<stu_grade <<endl;
outfile.close();
cout << "录入学生信息成功!" << endl;
return true;
}
}
/*查找 */
bool select_stu(int type)
{
int stu_id,stu_grade;
char stu_name[N],stu_class[N];
ifstream select;
select.open(stu_file);
if (type == 1) {
cout << "请输入查找的学号:";
int num;
cin >> num;
while(select >> stu_id >> stu_name>>stu_class>>stu_grade){
if(num==stu_id){
cout <<"按学号查找结果如下:"<<endl;
cout << stu_id << "\t" << stu_name<<"\t"<<stu_class<<"\t"<<stu_grade <<endl;
return true;
}
}
}
else if (type == 2) {
cout << "请输入查找的姓名:";
char name[N];
cin >> name;
while(select >> stu_id >> stu_name>>stu_class>>stu_grade){
if(strcmp(name,stu_name)==0)
{
cout <<"按姓名查找结果如下:"<<endl;
cout << stu_id << "\t" << stu_name<<"\t"<<stu_class<<"\t"<<stu_grade <<endl;
return true;
}
}
}
else if (type == 3) {
cout << "请输入查找的班级名称:";
char in_class[N];
cin >> in_class;
while(select >> stu_id >> stu_name>>stu_class>>stu_grade){
if(strcmp(in_class,stu_class)==0)
{
cout <<"按班级查找结果如下:"<<endl;
cout << stu_id << "\t" << stu_name<<"\t"<<stu_class<<"\t"<<stu_grade <<endl;
return true;
}
}
}
else if (type == 4) {
cout << "请输入查找的分数:";
int grade;
cin >> grade;
while(select >> stu_id >> stu_name>>stu_class>>stu_grade){
if(grade==stu_grade)
{
cout <<"按分数查找结果如下:"<<endl;
cout << stu_id << "\t" << stu_name<<"\t"<<stu_class<<"\t"<<stu_grade <<endl;
return true;
}
}
}
cout << "找不到此学生信息" << endl << endl;
return false;
}
/*char转string */
string CharToStr(char * contentChar)
{
string tempStr;
for (int i=0;contentChar[i]!='\0';i++)
{
tempStr+=contentChar[i];
}
return tempStr;
}
/*int转string */
string IntToStr(int n)
{
int m = n;
char s[ARRAY];
char ss[ARRAY];
int i=0,j=0;
if (n < 0)// 处理负数
{
m = 0 - m;
j = 1;
ss[0] = '-';
}
while (m>0)
{
s[i++] = m % 10 + '0';
m /= 10;
}
s[i] = '\0';
i = i - 1;
while (i >= 0)
{
ss[j++] = s[i--];
}
ss[j] = '\0';
return ss;
}
/*修改学生信息,根据学号 */
bool modify_student(int id)
{
int stu_id,stu_grade;
char stu_name[N],stu_class[N];
ifstream select;
select.open(stu_file);
int line =1;//该学生在第几行
while(select >> stu_id >> stu_name>>stu_class>>stu_grade){
if(stu_id==id){
cout <<endl;
cout <<"已找到该学生,名为 “"<<stu_name<<"” 输入你想修改的属性(1.学号\t2.姓名\t3.班级\t4.成绩):"<<endl;
cout <<"请输入:";
int mod_ch;
cin>>mod_ch;
switch(mod_ch){
case 1:
cout << "原学号:"<<stu_id<<endl;
cout << "请输入新学号:";
int new_id;
cin>>new_id;
cout <<"确定修改?(1.是\t2.否)"<<endl;
cout <<"请输入:";
int mod_1;
cin >> mod_1;
if(mod_1==1){
string new_data_s=IntToStr(new_id)+"\t" + CharToStr(stu_name) +"\t" + CharToStr(stu_class) +"\t" + IntToStr(stu_grade);
cout<<new_data_s<<endl;
char new_data[ARRAY];
int i;
for(i=0;i<new_data_s.length();i++)
new_data[i] = new_data_s[i];
new_data[i] = '\0';
ModifyLineData(stu_file,line,new_data);
cout <<"修改成功"<<endl;
return true;
}
break;
case 2:
cout << "原姓名:"<<stu_name<<endl;
cout << "请输入新姓名:";
char new_name[N];
cin>>new_name;
cout <<"确定修改?(1.是\t2.否)"<<endl;
cout <<"请输入:";
int mod_2;
cin >> mod_2;
if(mod_2==1){
string new_data_s=IntToStr(stu_id)+"\t" + CharToStr(new_name) +"\t" + CharToStr(stu_class) +"\t" + IntToStr(stu_grade);
cout<<new_data_s<<endl;
char new_data[ARRAY];
int i;
for( i=0;i<new_data_s.length();i++)
new_data[i] = new_data_s[i];
new_data[i] = '\0';
ModifyLineData(stu_file,line,new_data);
cout <<"修改成功"<<endl;
return true;
}
break;
case 3:
cout << "原班级:"<<stu_class<<endl;
cout << "请输入新班级:";
char new_class[N] ;
cin>>new_name;
cout <<"确定修改?(1.是\t2.否)"<<endl;
cout <<"请输入:";
int mod_3;
cin >> mod_3;
if(mod_3==1){
string new_data_s=IntToStr(stu_id)+"\t" + CharToStr(stu_name) +"\t" + CharToStr(new_class) +"\t" + IntToStr(stu_grade);
cout<<new_data_s<<endl;
char new_data[ARRAY];
int i;
for( i=0;i<new_data_s.length();i++)
new_data[i] = new_data_s[i];
new_data[i] = '\0';
ModifyLineData(stu_file,line,new_data);
cout <<"修改成功"<<endl;
return true;
}
break;
case 4:
cout << "原成绩:"<<stu_grade<<endl;
cout << "请输入新成绩:";
int new_grade;
cin>>new_grade;
cout <<"确定修改?(1.是\t2.否)"<<endl;
cout <<"请输入:";
int mod_4;
cin >> mod_4;
if(mod_4==1){
string new_data_s=IntToStr(stu_id)+"\t" + CharToStr(stu_name) +"\t" + CharToStr(stu_class) +"\t" + IntToStr(new_grade);
cout<<new_data_s<<endl;
char new_data[ARRAY];
int i;
for( i=0;i<new_data_s.length();i++)
new_data[i] = new_data_s[i];
new_data[i] = '\0';
ModifyLineData(stu_file,line,new_data);
cout <<"修改成功"<<endl;
return true;
}
break;
}
break;
}
line++;
}
return false;
}
void ModifyLineData(char* fileName, int lineNum, char* lineData)
{
ifstream in;
in.open(fileName);
string strFileData = "";
int line = 1;
char tmpLineData[1024] = {0};
while(in.getline(tmpLineData, sizeof(tmpLineData)))
{
if (line == lineNum)
{
strFileData += CharToStr(lineData);
strFileData += "\n";
}
else
{
strFileData += CharToStr(tmpLineData);
strFileData += "\n";
}
line++;
}
in.close();
//写入文件
ofstream out;
out.open(fileName);
out.flush();
out<<strFileData;
out.close();
}
/*删除学生,根据学号 */
bool delete_student(int id)
{
int stu_id,stu_grade;
char stu_name[N],stu_class[N];
ifstream select;
select.open(stu_file);
int line =1;//该学生在第几行
while(select >> stu_id >> stu_name>>stu_class>>stu_grade)
{
if(stu_id==id){
cout <<endl;
cout <<"已找到该学生,名为“"<<stu_name<<"”是否删除? 1.是 2.否"<<endl;
cout <<"请输入:";
int del_ch;
cin>>del_ch;
if(del_ch==1)
{
DelLineData(stu_file,line);
return true;
}
else
return false;
break;
}
line++;
}
return false;
}
void DelLineData(char* fileName, int lineNum)
{
ifstream in;
in.open(fileName);
string strFileData = "";
int line = 1;
char lineData[1024] = {0};
while(in.getline(lineData, sizeof(lineData)))
{
if (line == lineNum)
{
strFileData += "";
}
else
{
strFileData += CharToStr(lineData);
strFileData += "\n";
}
line++;
}
in.close();
//写入文件
ofstream out;
out.open(fileName);
out.flush();
out<<strFileData;
out.close();
}
/*主页 */
int index(char *name)
{
system("clear");
cout <<"欢迎您:"<< name <<endl;
cout<<endl;
cout <<"请执行如下操作"<<endl;
cout << "1.查看全体学生信息" <<endl;
cout << "2.添加学生信息" <<endl;
cout << "3.查找学生信息" <<endl;
cout << "4.修改学生信息" <<endl;
cout << "5.删除学生信息" <<endl;
cout << "6.退出" <<endl;
cout<<endl;
cout<<"请输入执行号:";
char choice;
cin >> choice;
switch (choice) {
case '1':
cout << endl;
cout << "显示当前全体学生信息:" << endl;
if(all_stu())
gowhere(name);
cout << endl;
break;
case '2':
cout << endl;
int stu_id,stu_grade;
char stu_name[N],stu_class[N];
cout << "输入学生信息:" << endl;
cout << "学号:";
cin >> stu_id;
cout << "姓名:";
cin >> stu_name;
cout << "班级:";
cin >> stu_class;
cout << "成绩:";
cin >> stu_grade;
cout << endl;
if(add_stu(stu_id,stu_name,stu_class,stu_grade))
gowhere(name);
break;
case '3':
cout << endl;
cout << "1.根据学号查询\t2.根据姓名查询\t3.根据班级查询\t4.根据成绩查询"<<endl;
int ch;
cout <<"请输入:";
cin >> ch;
select_stu(ch);
gowhere(name);
break;
case '4':
{
cout << endl;
all_stu();
cout << "请输入你想修改的学号:";
int id;
cin >> id;
if(modify_student(id))
{
cout <<"修改成功!"<< endl;
cout << "当前全体学生信息:" << endl;
all_stu();
gowhere(name);
}
break;
}
case '5':
cout << endl;
all_stu();
cout << "请输入你想删除的学号:";
int id;
cin >> id;
if(delete_student(id))
{
cout <<"删除成功!"<< endl;
cout << "当前全体学生信息:" << endl;
all_stu();
gowhere(name);
}else{
cout <<"没有该学号,删除失败,请重试"<<endl;
gowhere(name);
}
cout << endl;
break;
case '6':
{
system("clear");
cout << "退出系统:";
cout << endl;
break;
}
}
}
/*辅助页面 */
int gowhere(char *name){
cout <<endl;
cout<<"操作执行完毕......"<<endl;
cout<<"1.回主页 2.退出登录 3.退出系统"<<endl;
cout <<"请选择:"<<endl;
int go_w;
cin>>go_w;
if(go_w==1){
index(name);
}else if(go_w==2){
main();
}else{
cout << "退出系统:";
cout << endl;
return 0;
}
return 0;
}