StudentMenange.h
#pragma once
#define SCSIZE 3
#define STUSIZE 100
typedef struct _Student {
int id;
char name[100];
char sex[4];
float score[3];
float avg;
float sum;
}Student;
typedef struct StudentMenge {
Student data[100];
int cursize;//学生个数
int maxsize;//容量
}Stu_Menge;
//初始化
void Init_StudentMenge(Stu_Menge* sm);
bool is_Full(Stu_Menge* sm);
bool is_Empty(Stu_Menge* sm);
bool GetSize(Stu_Menge* sm);
bool Add_Student(Stu_Menge* sm);
void Print_StuMenge(Stu_Menge* sm);
void LoadMessage(Stu_Menge* sm);
void Show_Menu();
void Save_File(Stu_Menge* sm);
bool Find_Stud(Stu_Menge* sm,int *p);
void Delete_Stud(Stu_Menge* sm);
void Modify_Stud(Stu_Menge* sm);
void Clear_Stud(Stu_Menge* sm);
StudentMenange.cpp
#define _CRT_SECURE_NO_WARNINGS
#include"LinkStack.h"
#include<assert.h>
#include<iostream>
#include<fstream>
using namespace std;
bool is_Full(Stu_Menge* sm) {
assert(sm != NULL);
return sm->cursize == sm->maxsize;
}
bool is_Empty(Stu_Menge* sm) {
assert(sm != NULL);
return sm->cursize == 0;
}
bool GetSize(Stu_Menge* sm) {
assert(sm != NULL);
return sm->cursize;
}
void Init_StudentMenge(Stu_Menge* sm) {
assert(sm != NULL);
sm->maxsize = STUSIZE;
sm->cursize = 0;
memset(sm->data , 0, sizeof(Student)*(sm->maxsize ));
}
bool Add_Student(Stu_Menge* sm) {
assert(sm != NULL);
LoadMessage(sm);
Student s;
int my_id;
char my_name[20] = {0};
char my_sex[4];
float my_score[3] = {0};
float my_avg=0;
float my_sum=0;
cout << "请输入你的学号:"<<endl;
cin >> my_id;
for (int i = 0; i < sm->cursize; i++) {
while (sm->data[i].id == my_id) {
cout << "已存在该账号,请重新输入!" << endl;
cin >> my_id;
}
}
cout << "请输入你的姓名:" << endl;
cin >> my_name;
cout << "请输入你的性别:" << endl;
cin >> my_sex;
for (int i = 0; i < 3; i++) {
cout << "请输入你"<<i+1<<"们课程的成绩 1--->语文 2--->数学 3--->物理:" << endl;
cin >> my_score[i];
}
s.id = my_id;
for (int j = 0; j < 10; j++) {
s.name[j] = {0};
}
memcpy(s.name, my_name, sizeof(char)*10);
memcpy(s.sex, my_sex, sizeof(4));
s.sum = 0;
for (int i = 0; i < 3; i++) {
s.score[i] = my_score[i];
s.sum += s.score[i];
}
s.avg = s.sum / 3;
sm->data[sm->cursize] = s;
sm->cursize ++;
Save_File(sm);
system("pause");
system("cls");
return true;
}
void Print_StuMenge(Stu_Menge* sm) {
assert(sm != NULL);
int i = 0;
if (sm->cursize == 0) {
cout << "记录为空!" << endl;
return;
}
cout <<endl<< "******************学生信息如下******************" << endl;
while (i < sm->cursize) {
cout << "id号为:" << sm->data[i].id
<<endl<< "姓名为:" << sm->data[i].name
<< endl << "性别为:" << sm->data[i].sex
<< endl << "语文成绩为:" << sm->data[i].score[0]
<< endl << "数学成绩为:" << sm->data[i].score[1]
<< endl << "物理成绩为:" << sm->data[i].score[2]
<< endl << "平均成绩为:" << sm->data[i].avg
<< endl << "总成绩为:" << sm->data[i].sum << endl;
cout << "-------------------------------------------" << endl;
i++;
}
cout << endl << "**************************************************" << endl;
}
void Show_Menu() {
cout << "欢迎来到学生管理系统!" << endl;
cout << "\t\t+-----------------------------------------+\t\t" << endl;
cout << "\t\t|***************1、查询学生***************|\t\t" << endl;
cout << "\t\t|*****************************************|\t\t" << endl;
cout << "\t\t|***************2、添加学生***************|\t\t" << endl;
cout << "\t\t|*****************************************|\t\t" << endl;
cout << "\t\t|***************3、删除学生***************|\t\t" << endl;
cout << "\t\t|*****************************************|\t\t" << endl;
cout << "\t\t|***************4、显示学生***************|\t\t" << endl;
cout << "\t\t|*****************************************|\t\t" << endl;
cout << "\t\t|***************5、修改信息***************|\t\t" << endl;
cout << "\t\t|*****************************************|\t\t" << endl;
cout << "\t\t|***************6、清空学生***************|\t\t" << endl;
cout << "\t\t|*****************************************|\t\t" << endl;
cout << "\t\t|***************0、退出系统***************|\t\t" << endl;
cout << "\t\t+-----------------------------------------+\t\t" << endl;
}
void Save_File(Stu_Menge* sm) {
assert(sm != NULL);
FILE* fp = fopen("stud.txt", "wb");
if (fp == NULL) {
cout << "文件打开失败!" << endl;
return;
}
fwrite(&(sm->cursize), sizeof(int), 1, fp);
fwrite((sm->data), sizeof(Student), sm->cursize , fp);
fclose(fp);
fp = NULL;
}
void LoadMessage(Stu_Menge* sm) {
assert(sm != NULL);
FILE *fp=fopen("stud.txt", "rb");
if (fp == NULL) {
cout << "文件打开失败!" << endl;
return;
}
fread(&sm->cursize, sizeof(int), 1, fp);
fread((sm->data), sizeof(Student), sm->cursize, fp);
fclose(fp);
fp = NULL;
}
bool Find_Stud(Stu_Menge* sm,int *p) {
assert(sm != NULL);
LoadMessage(sm);
bool tag = false;
cout << "请输入查询方式:1----->id号 2---->姓名" << endl;
int select=0;
cin >> select;
if (select == 1) {
cout << "------------请输入你要查询的id号--------------" << endl;
int my_id=0;
cin >> my_id;
int i;
for ( i = 0; i < sm->cursize; i++) {
if (my_id == sm->data[i].id) {
tag = true;
*p = i;
cout <<endl<< "查询成功,id号为"<< my_id <<"学生信息如下:" << endl;
cout << "------------------------------------------" << endl;
cout << "姓名为:" << sm->data[i].name
<< endl << "性别为:" << sm->data[i].sex
<< endl << "语文成绩为:" << sm->data[i].score[0]
<< endl << "数学成绩为:" << sm->data[i].score[1]
<< endl << "物理成绩为:" << sm->data[i].score[2]
<< endl << "平均成绩为:" << sm->data[i].avg
<< endl << "总成绩为:" << sm->data[i].sum << endl;
cout << "------------------------------------------" << endl;
break;
}
}
if(i== sm->cursize) cout << "查无此人!" << endl;
}
else if (select == 2) {
char my_name[10] = { 0 };
cout << "------------请输入你要查询的姓名--------------" << endl;
cin >> my_name;
int i;
for ( i = 0; i < sm->cursize; i++) {
if (strcmp(my_name, sm->data[i].name) == 0) {
tag = true;
*p = i;
cout << "查询成功,姓名为" << my_name<< "学生信息如下:" << endl;
cout <<endl<< "------------------------------------------" << endl;
cout << "id为:" << sm->data[i].id
<< endl << "性别为:" << sm->data[i].sex
<< endl << "语文成绩为:" << sm->data[i].score[0]
<< endl << "数学成绩为:" << sm->data[i].score[1]
<< endl << "物理成绩为:" << sm->data[i].score[2]
<< endl << "平均成绩为:" << sm->data[i].avg
<< endl << "总成绩为:" << sm->data[i].sum << endl;
cout << "------------------------------------------" << endl << endl;
break;
}
}
if (i == sm->cursize) cout << "查无此人!" << endl;
}
else cout << "输入有误!" << endl;
return tag;
}
void Delete_Stud(Stu_Menge* sm) {
assert(sm != NULL);
LoadMessage(sm);
cout << "请输入删除方式 1----->按学号删除 2----->按姓名删除" << endl;
int select=0;
cin >> select;
if (select == 1) {
cout << "请输入你要删除的学号" << endl;
int my_id=0;
cin >> my_id;
int i;
for ( i = 0; i < sm->cursize; i++) {
if (my_id == sm->data[i].id) {
int k = i;
if (k == sm->cursize - 1) {
sm->cursize--;
cout << "删除成功!" << endl;
break;
}
for ( k = i; k < sm->cursize - 1; k++) {
sm->data[k] = sm->data[k + 1];
}
sm->cursize--;
cout << "删除成功!" << endl;
break;
}
}
if (i == sm->cursize) cout << "查无此人,删除失败!" << endl;
}
else if (select == 2) {
cout << "请输入你要删除的姓名" << endl;
char my_name[10] = { 0 };
cin >> my_name;
int i;
for (i = 0; i < sm->cursize; i++) {
if (strcmp(my_name, sm->data[i].name) == 0) {
for (int k = i; k < sm->cursize - 1; k++) {
sm->data[k] = sm->data[k + 1];
}
sm->cursize--;
cout << "删除成功!" << endl;
break;
}
}
if (i == sm->cursize) cout << "查无此人,删除失败!" << endl;
}
else cout << "输入有误!" << endl;
Save_File(sm);
}
void Modify_Stud(Stu_Menge* sm) {
assert(sm != NULL);
int i = 0;
if (Find_Stud(sm,&i)) {
cout << "请输入你要修改的什么?" << endl;
cout << "---------------------------------" << endl;
cout << "\t\t1、----->姓名" << endl;
cout << "\t\t2、----->性别" << endl;
cout << "\t\t3、----->语文成绩" << endl;
cout << "\t\t4、----->数学成绩" << endl;
cout << "\t\t5、----->物理成绩" << endl;
cout << "---------------------------------" << endl;
int mod;//修改的类别
cin >> mod;
if (mod == 1) {
//姓名
char my_name[10] = {0};
cout << "请输入你要修改的姓名:" << endl;
cin >> my_name;
memcpy(sm->data[i].name, my_name, sizeof(10));
cout << "修改成功!" << endl;
}
else if (mod == 2) {//性别
cout << "请输入改正后的性别:" << endl;
char my_sex[4] = {0};
cin >> my_sex;
memcpy(sm->data[i].sex, my_sex, sizeof(4));
cout << "修改成功!" << endl;
}
else if (mod == 3) {//语文成绩
cout << "请输入改正后的语文成绩:" << endl;
float grade = 0;
cin >> grade;
sm->data[i].score[0] = grade;
cout << "修改成功!" << endl;
}
else if (mod == 4) {//数学成绩
cout << "请输入改正后的数学成绩:" << endl;
float grade = 0;
cin >> grade;
sm->data[i].score[1] = grade;
cout << "修改成功!" << endl;
}
else if (mod == 5) {//物理成绩
cout << "请输入改正后的物理成绩:" << endl;
float grade = 0;
cin >> grade;
sm->data[i].score[2] = grade;
cout << "修改成功!" << endl;
}
else cout << "输入有误,请重新输入!" << endl;
}
Save_File(sm);
}
void Clear_Stud(Stu_Menge* sm) {
assert(sm != NULL);
ofstream ifs;
ifs.open("stud.txt", ios::trunc);
ifs.close();
//Save_File(sm);
cout << "---------------清空成功!----------------" << endl;
}
test.cpp
#include<iostream>
using namespace std;
#include"LinkStack.h"
int main()
{
int select;
Stu_Menge sm;
Init_StudentMenge(&sm);
int e = 0;
while (true)
{
Show_Menu();
cout << "请输入你的选择:" << endl;
cin >> select;
switch (select)
{
case 1://1、查询学生
Find_Stud(&sm, &e);
system("pause");
system("cls");
break;
case 2:// 2、添加学生
Add_Student(&sm);
system("cls");
break;
case 3: // 3、删除学生
Delete_Stud(&sm);
system("pause");
system("cls");
break;
case 4: // 4、显示学生
LoadMessage(&sm);
Print_StuMenge(&sm);
system("pause");
system("cls");
break;
case 5:
Modify_Stud(&sm);
system("pause");
system("cls");
break;
case 6:
Clear_Stud(&sm);
system("pause");
system("cls");
break;
case 0:// 0、退出系统
cout << "欢迎下次使用!" << endl;
return 0;
default:
cout << "输入有误,请重新输入!" << endl;
system("pause");
system("cls");
break;
}
}
/*Stu_Menge sm;
Init_StudentMenge(&sm);
Add_Student(&sm);
Print_StuMenge(&sm);
Show_Menu();*/
}