前情提要
- 其实原本我不是很想做这个学校项目,但是我上优快云 发现没有一篇是关于这个(找不到代码copy)
所以也有了今天这篇代码,直接开搞
注意里面为了方便,我加了一点C++的东西
当然,这也是我一个字一个字敲出来的,辛苦费一个赞没关系吧!
拜托啦这个对我真的很重要QAQ
开吃
#include<iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
//宏定义
#define LEN sizeof(struct student)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf%"//向左对齐,不够8位补空格
#define DATA stu[i].num,stu[i].name, stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum
/*
函数声明
*/
void in(); //录用学生信息
void search();//查找学生信息
void del();//删除学生信息
void modify();//修改学生信息
void insert();//插入学生信息
void order();//对学生从高到低进行排序
void tatal();//统计学生人数
void show();//显示学生信息
void menu();//菜单
/*
结构体
*/
struct student
{
int num; //学号
char name[15];//姓名
double elec;//选修课
double expe;//实验课
double requ;//必修课
double sum;//总分
};
struct student stu[50]; //定义结构体数组
void in()
{
int i, m = 0; //m是记录的条数
char ch[2];
FILE *fp; //定义访问文件指针
if((fp = fopen("data.txt", "a+")) == NULL)
{
cout << "文件不存在!" << endl;
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN, 1, fp) == 1)
{
m++;
}
}
fclose(fp);
if(m == 0)
{
cout << "文中没有记录" << endl;
}
else
{
show(); //调用原有信息
}
if((fp = fopen("data.txt", "wb")) == NULL)
{
cout << "文件不存在!" << endl;
return;
}
cout << "请输入学生的信息(y/n):";
cin >> ch;
while(strcmp(ch, "y") == 0 || strcmp(ch, "Y") == 0) //判断是否要录用信息
{
cout << "number:";
cin >> stu[m].num;
for(i = 0; i < m; i++)
{
if(stu[i].num == stu[m].num)
{
cout << "number已经存在了,请按任意键继续!";
getch();
fclose(fp);
return;
}
}
cout << "name:";
cin >> stu[m].name;
cout << "elective(选修课成绩):";
cin >> stu[m].elec;
cout << "experiment:";
cin >> stu[m].expe;
cout << "require course:(必修课成绩)";
cin >> stu[m].requ;
stu[m].num = stu[m].elec + stu[m].expe + stu[m].requ; //计算出总成绩
if(fwrite(&stu[m], LEN, 1, fp) != 1)
{
cout << "不能保存" ;
getch();
}
else
{
cout << stu[m].name << " 被保存!" << endl;
m++;
}
cout << "是否继续录用?(y/n):";
cin >> ch;
}
fclose(fp);
cout << "好的嘞!"<< endl;
}
void search()
{
FILE *fp;
int snum, i, m = 0;
if((fp = fopen("data.txt", "rb")) == NULL)
{
cout << "文件不存在!" << endl;
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN, 1, fp) == 1)
{
m++;
}
}
fclose(fp);
if(m == 0)
{
cout << "文中没有记录" << endl;
}
cout << "请输入number:";
cin >> snum;
for(int i = 0; i < m; i++)
if(snum == stu[i].num)
{
cout << "number name elective experiment required sum\t" << endl;
printf(FORMAT, DATA);
break;
}
if(i == m) cout << "没有找到该学生哟!" << endl;
}
void del()
{
FILE *fp;
int snum, i, j, m = 0;
char ch[2];
if((fp = fopen("data.txt", "r+")) == NULL)
{
cout << "文件不存在!" << endl;
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN, 1, fp) == 1)
{
m++;
}
}
fclose(fp);
if(m == 0)
{
cout << "文件中没有记录!" << endl;
return;
}
cout << "请输入学生学号:";
cin >> snum;
for(int i = 0; i < m; i++)
{
if(snum == stu[i].num)
{
cout << "找到了这条记录,是否删除?(y/n)";
cin >> ch;
if(strcmp(ch,"Y") == 0 | strcmp(ch, "y") == 0)
{
for(j = i; j < m; j++)
{
stu[j] = stu[j+1];
m--;
}
if((fp = fopen("data.txt","wb")) == NULL)
{
cout << "文件不存在!" << endl;
return;
}
for(j = 0; j < m ; j ++)
if(fwrite(&stu[j], LEN, 1, fp) != 1)
{
cout << "删除失败!" << endl;
getch();
}
fclose(fp);
cout << "删除成功!" << endl;
} else{
cout << "找到记录了,选择不删除!";
}
break;
}
else{
cout << "没有找到这名学生!" << endl;
}
}
}
void modify()
{
FILE *fp;
struct student t;
int i = 0, j = 0 , m = 0 , snum;
if((fp = fopen("data.txt","r+"))==NULL)
{
printf("文件不存在!\n");
return;
}
while(!feof(fp))
if(fread(&stu[m], LEN, 1, fp) == 1) m++;
if(m == 0)
{
printf("文中没有记录!\n");
fclose(fp);
return;
}
show();
printf("请输入要修改的学生number: ");
cin >> snum;
for(int i = 0 ; i < m; i++)
if(snum == stu[i].num)
{
cout << "找到了这名同学的信息,可以修改他的信息!\n";
cout << "name:";
cin >> stu[i].name;
cout << "elective:";
cin >> stu[i].elec;
cout << "experiment:";
cin >> stu[i].expe;
cout << "required course:";
cin >> stu[i].requ;
cout << "修改成功!";
stu[i].num = stu[i].elec + stu[i].expe+ stu[i].requ;
if((fp = fopen("data.txt","wb")) == NULL)
{
cout << "不能打开文件\n";
return;
}
for(j = 0; j < m; j ++)
if(fwrite(&stu[j], LEN, 1, fp) != 1)
{
cout << "不能保存文件!";
getch();
}
fclose(fp);
break;
}
if(i == m)
{
cout << "没有找到这名学生!\n";//未找到要查找的信息
}
}
void insert()
{
FILE *fp;
int i, j, k, m = 0,snum;
if((fp = fopen("data.txt", "r+")) == NULL)
{
cout << "文件不存在!\n";
return;
}
while(!feof(fp))
if(fread(&stu[m], LEN, 1, fp) == 1) m++;
if(m == 0)
{
cout << "文件中没有记录!" <<endl;
fclose(fp);
return;
}
cout << "请输入要插入的位置(number):" << endl;
cin >> snum; // 输入要插入的位置
for( i = 0 ; i < m ; i ++)
{
if(snum == stu[i].num) break;
for(j = m -1 ; j > i; j--)
stu[j + 1] = stu[j]; //从第一条记录开始均向后移动以为
cout << "请输入要插入的学生的信息。" << endl;
cout << "number:";
cin >> stu[i].num;
for(k = 0 ; k < m ; k ++)
{
if(stu[k].num == stu[m].num)
{
cout << "number已经存在,请按任意键继续!";
getch();
fclose(fp);
return;
}
cout << "name:";
scanf("%s", stu[i + 1].name);
cout << "elective:";
scanf("%lf", &stu[i+1].elec);
cout << "experiment:";
scanf("%lf",&stu[i+1].expe);
cout << "required course:";
scanf("%lf",&stu[i+1].requ);
stu[i+1].num = stu[i+1].elec + stu[i+1].expe+ stu[i+1].requ;
cout << "插入成功!按任意键返回主界面!"<< endl;
if((fp = fopen("data.txt","wb")) == NULL) //如果文件不存在,给出提示
{
cout << "不能打开!" << endl;
return;
}
for(k = 0; k <= m; k ++)
{
if(fwrite(&stu[k], LEN, 1, fp) != 1)
{
cout << "不能保存!";
getch();
}
}
fclose(fp);
}
}
}
void order()
{
FILE* fp;
struct student t;
int i = 0, j = 0 , m = 0;
if((fp = fopen("data.txt","r+")) == NULL)
{
cout << "文件不存在" <<endl;
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp) == 1) m++;
fclose(fp);
if(m == 0)
{
cout << "文件中没有记录!" << endl;
return;
}
if((fp = fopen("data.txt", "wb")) == NULL)
{
cout << "文件不存在!" << endl;
return;
}
for(i = 0 ; i < m-1 ; i++)
for(j = i+1; j < m; j ++)
if(stu[i].sum < stu[j].num){
t = stu[i];
stu[i] = stu[j];
stu[j] = t;
}
if((fp = fopen("data.txt","wb"))==NULL)
{
cout << "文件不存在!" << endl;
return;
}
for(i = 0 ; i < m ; i ++)
if(fwrite(&stu[i], LEN, 1, fp) != 1)
{
printf("%s 不能保存文件!\n");
getch();
}
fclose(fp);
cout << "保存成功!" << endl;
}
void total()
{
FILE *fp;
int m = 0;
if((fp = fopen("data.txt","r+"))== NULL)
{
cout << "文件不存在!" << endl;
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN, 1,fp)==1) m++;
if(m == 0)
{
cout << "文件无法命名!" << endl;
fclose(fp);
return;
}
cout << "这个班级一共有" << m << endl;
fclose(fp);
}
void show()
{
FILE *fp;
int i, m = 0;
fp = fopen("data.txt","rb");
while(!feof(fp))
{
if(fread(&stu[m], LEN, 1, fp) == 1)
m++;
}
fclose(fp);
printf("number name elective experiment required sum\t\n");
for(i= 0; i < m; i++)
{
printf(FORMAT, DATA); //将信息按指定格式打印
cout << endl;
}
}
/*
自定义实现菜单功能
*/
void menu()
{
system("cls");
cout << "\n\n\n\n";
cout << "\t\t|---------------学生信息管理系统---------------|" << endl;
cout << "\t\t|\t\t\t\t\t |" << endl;
cout << "\t\t|\t\t 1. 录入学生信息\t |" << endl;
cout << "\t\t|\t\t 2. 查找学生信息\t |" << endl;
cout << "\t\t|\t\t 3. 删除学生信息\t |" << endl;
cout << "\t\t|\t\t 4. 修改学生信息\t |" << endl;
cout << "\t\t|\t\t 5. 插入学生信息\t |" << endl;
cout << "\t\t|\t\t 6. 排序\t\t |" << endl;
cout << "\t\t|\t\t 7. 统计学生总数\t |" << endl;
cout << "\t\t|\t\t 8. 显示所有学生信息\t |" << endl;
cout << "\t\t|\t\t 0. 退出系统\t\t |" << endl;
cout << "\t\t|\t\t\t\t\t |" << endl;
cout << "\t\t|----------------------------------------------|" << endl;
cout << "\t\t\t请选择(0-8):";
}
/**
主函数
*/
int main()
{
system("color f0\n");//白底黑字
int n;
menu();
cin >> n;
cout << n << endl;
while(n)
{
switch(n)
{
case 1:
in();
break;
case 2:
search();
break;
case 3:
del();
break;
case 4:
modify();
break;
case 5:
insert();
break;
case 6:
order();
break;
case 7:
total();
break;
case 8:
show();
break;
default:
break;
}
getch();
menu();
cin >> n;
}
}