其他linux相关作业点这里(传送门)
Ø基本功能:
对学生成绩进行管理。要求实现数据的基本操作:学院和学生信息以及学生成绩的增加,修改,删除,统计
所有文件操作必须使用linux系统下文件控制相关API,不能使用C库中文件操作相关的库函数。可以使用数据库。
程序预览
主菜单模块
学生管理模块
4、学生信息查询
学院管理模块
4、学院信息查询
成绩管理模块
4、成绩信息查询
成绩分析
(1)总排名前五
(2)学科前三名
源代码:(混合调用了一些c++函数,整体是c语言)
#include
#include
#include
using namespace std;
#define STU_FILE_NAME "student.txt" //本地文件名
#define SCO_FILE_NAME "score.txt"
#define COL_FILE_NAME "college.txt"
#define OFFSET 0 //文件指针偏移量
int stu_file,sco_file,col_file;
int sco_num,stu_num,col_num;
struct student{ //学生类
char no[20],name[20],belong[20],state[20];
int sum;
}stu[1000];
struct score{ //成绩类
char no[20],object[20],flag[20];
int grade;
}sco[1000];
struct college{ //学院类
char no[20],name[20];
}col[1000];
void init(){ //初始化函数 加载本地文件到内存中
stu_num=sco_num=col_num=0;
student te; score t2; college t3;
stu_file=open(STU_FILE_NAME,O_RDWR|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
if(stu_file<0){printf("open file error!!!\n");exit(1);}
while(read(stu_file,&te,sizeof(student))>0) stu[stu_num++] = te;
sco_file=open(SCO_FILE_NAME,O_RDWR|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
if(sco_file<0){printf("open file error!!!\n");exit(1);}
while(read(sco_file,&t2,sizeof(score))>0) sco[sco_num++] = t2;
col_file=open(COL_FILE_NAME,O_RDWR|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
if(col_file<0){printf("open file error!!!\n");exit(1);}
while(read(col_file,&t3,sizeof(college))>0) col[col_num++] = t3;
printf("从本地文件读取了\n学生记录%d条 \n成绩记录%d条\n学院记录%d条\n\n",stu_num,sco_num,col_num);
}
void student_file(){ //学生类文件保存
int cl=open(STU_FILE_NAME,O_RDWR|O_TRUNC); close(cl); // clear file
lseek(stu_file,OFFSET,SEEK_SET); //指针还原
int si = sizeof(student);
for(int i = 0; i < stu_num; i++) write(stu_file,&stu[i],si); //写入到本地
cout<<"成功更新"<>te.no>>te.name>>te.belong;
cout<<"请输入学籍状态 1、在学 2 、休学 3、退学"<>te.state;
if(student_find(te.no) != -1){
puts("已存在该学生,添加失败");
return;
}
if(college_find(te.belong) == -1){
puts("不存在该学院,添加失败");
return;
}
stu[stu_num++]=te;
student_file();
}
void student_del(){ //学生删除
student te;
//char no[]
cout<<"请输入要删除的学生学号"<>te.no;
int ob = student_find(te.no) ;
if(ob== -1){
puts("不存在该学生,删除失败");
return;
}
for(int i = ob+1; i < stu_num; i++)
stu[i-1]=stu[i];
stu_num -= 1; // 学生数量减一
student_file();
puts("删除成功");
}
void student_upd(){ //学生更新
student te;
//char no[]
cout<<"请输入要修改的学生学号"<>te.no;
int ob = student_find(te.no) ;
if(ob== -1){
puts("不存在该学生,无法修改");
return;
}
cout<<"请重新输入学生信息:姓名, 学院编号"<>stu[ob].name>>stu[ob].belong;
student_file();
puts("修改成功");
}
void student_que(){ //学生查询
cout<<"共有"<>te.no>>te.object>>te.grade>>te.flag;
int ob = student_find(te.no) ;
if(ob== -1){
puts("不存在该学生,无法添加");
return;
}
if(score_find(te.no,te.object) !=-1 ){
puts("已经存在该记录,无法修改");
return;
}
sco[sco_num++]=te;
score_file();
}
void score_del(){ //成绩删除
score te;
//char no[]
cout<<"请输入学号,科目"<>te.no>>te.object;
int ob = score_find(te.no,te.object) ;
if(ob== -1){
puts("不存在该记录,删除失败");
return;
}
for(int i = ob+1; i < sco_num; i++)
sco[i-1]=sco[i];
sco_num -= 1; // 成绩记录减一
score_file();
puts("删除成功");
}
void score_upd(){ //成绩更新
score te;
//char no[]
cout<<"请输入学号,科目, 成绩"<>te.no>>te.object;
int ob = score_find(te.no,te.object) ;
if(ob== -1){
puts("不存在该记录,修改失败");
return;
}
cout<<"请重新输入成绩"<>sco[ob].grade;
student_file();
puts("修改成功");
}
void score_que(){ //成绩查询
cout<<"共有"<>te.no>>te.name;
if(college_find(te.no) != -1){
puts("已存在该学院,添加失败");
return;
}
col[col_num++]=te;
college_file();
// puts("增加成功");
}
void college_del(){ //学院删除
college te;
//char no[]
cout<<"请输入学院编号"<>te.no;
int ob = college_find(te.no) ;
if(ob== -1){
puts("不存在该记录,删除失败");
return;
}
for(int i = ob+1; i < col_num; i++)
col[i-1]=col[i];
col_num -= 1; // 学院记录减一
college_file();
puts("删除成功");
}
void college_upd(){ //学院更新
college te;
cout<<"请输入学院编号"<>te.no;
int ob = college_find(te.no) ;
if(ob== -1){
puts("不存在该学院,无法修改");
return;
}
cout<<"请输入学院新名字"<>col[ob].name;
college_file();
puts("修改成功");
}
void college_que(){ //学院查询
cout<<"共有"<>cmd;
switch(cmd){
case 1:student_add(); break;
case 2:student_del(); ; break;
case 3:student_upd() ; break;
case 4:student_que(); break;
default:return ;
}
}
void score_ope(){
cout<<"输入指令 增加 删除 修改 查询"<>cmd;
switch(cmd){
case 1:score_add(); break;
case 2:score_del(); ; break;
case 3:score_upd() ; break;
case 4:score_que(); break;
default:return ;
}
}
void college_ope(){
cout<<"输入指令 增加 删除 修改 查询"<>cmd;
switch(cmd){
case 1:college_add(); break;
case 2:college_del(); ; break;
case 3:college_upd() ; break;
case 4:college_que(); break;
default:return ;
}
}
bool cmp(student & a, student &b){
return a.sum>b.sum;
}
struct ss{ //成绩排名辅助数组
string no,name;
int grade;
ss(){}
ss(string n1, string n2, int n3){
no = n1;
name = n2;
grade = n3;
}
bool operator < (const ss &b)const{
return grade > b.grade;
}
};
map< string, int> ma;
string ha[100];
vectorve[100];
void score_ana(){ //成绩分析
int ob;
for(int i = 0; i < stu_num;i++) stu[i].sum=0; //将总分清零
for(int i = 0; i < sco_num;i++){
ob = student_find(sco[i].no);
stu[ob].sum+=sco[i].grade;
}
cout<<"总分成绩如下-------------------------\n"<>cmd;
switch(cmd){
case 1:student_ope(); break;
case 2:score_ope() ;break;
case 3:college_ope(); break;
case 4:score_ana(); break;
default:return 0;
}
}
return 0;
}