📄 implement.h
字号:
#include "head.h"
/*..................................函数说明........................................*/
void readme(); //操作说明
void readoneline( FILE *fp,Student A[],int i); //读取一条记录
void readfile(); //将文件内容读入内存
void query(); //查询模块
void addrecord(); //添加模块
void deleterecord(); //删除模块
void savechange(); //保存
void display(); //显示当前内存中的记录
void sortrecord(); //对学生成绩进行排名
/*..................................................................................*/
void readme(){
cout<<"..............................欢迎进入本程序................................"<<endl;
cout<<" 本程序是一个成绩管理程序,能方便地对学生成绩进行记录,保存,检索,修改。"<<endl;
cout<<endl<<" 操作提示:"<<endl;
cout<<"按 c或C 键进入查询操作界面"<<endl;
cout<<"按 t或T 键进入添加操作界面"<<endl;
cout<<"按 d或D 键进入删除操作界面"<<endl;
cout<<"按 i或I 键显示当前内存中的数据"<<endl;
cout<<"按 s或S 键保存对文件进行的更新和修改"<<endl;
cout<<"按 o或O 键进入排序界面"<<endl;
cout<<"按 q或Q 键进入退出程序"<<endl;
cout<<"............................................................................."<<endl;
char ch='w';
while(ch!='q'&&ch!='Q') // 输入的操作符控制块
{
ch=getchar();
if(ch=='c'||ch=='C') query();
else if(ch=='t'||ch=='T') addrecord();
else if(ch=='d'||ch=='D') deleterecord();
else if(ch=='i'||ch=='I') display();
else if(ch=='s'||ch=='S') savechange();
else if(ch=='o'||ch=='O') sortrecord();
else if(ch=='q'||ch=='Q') { cout<<"是否保存对文件的修改 Y/N";
cin>>ch; if(ch=='Y'||ch=='y') savechange();
ch=getchar();
if(ch=='Y'||ch=='y') { savechange(); exit(-1);}
else exit(-1);
}
else if(ch!='\n') {
cout<<endl<<"...."<<"错误的操作符"<<"..."<<endl; readme();
}
}
}
/*.........................................................................*/
void readoneline( FILE *fp,Student A[],int i){
fscanf(fp,"%8s",A[i].name);
fscanf(fp,"%9s",A[i].num);
fscanf(fp,"%s",A[i].cla);
fscanf(fp,"%d",A[i].mark+0);
fscanf(fp,"%d",A[i].mark+1);
fscanf(fp,"%d",A[i].mark+2);
fscanf(fp,"%d",A[i].mark+3);
fscanf(fp,"%d",A[i].mark+4);
}
int line_num=0; //用来存储文件中的学生记录条数
Student A[300]; //用来存储学生记录的对象
FILE *fp; //文件指针
char filename[30]; //用来存储文件路径及名字
/*....................................................................*/
void readfile(){
int i;
char ch;
cout<<endl<<"是否对默认文件进行操作? Y/N (默认值为E:\\1.txt)"<<endl;
if((ch=getchar())=='n'||ch=='N') {
cout<<"请输入您要进行操作的文件路径及名字:";
cin>>filename;
}
if(ch=='y'||ch=='Y') strcpy(filename,"E:\\1.txt");
if((fp=fopen(filename,"rb"))==NULL){
cerr<<"open unsuccess."<<endl;
exit(-1);
}
while((ch=fgetc(fp))!=EOF) {
if(ch=='\n') { if((ch=fgetc(fp))!='\n'&&(ch!=' ')) line_num++;
}
}
rewind(fp);
while(fgetc(fp)!='\n');
for(i=0;i<=line_num-1;i++)
readoneline(fp,A,i);
}
/*.........................................................................*/
void query(){
int i,j,con=0,s=0;
char ch;
char n[9];
char m[10];
cout<<"...............查询界面................"<<endl;
cout<<"按 1 键以姓名进行查询"<<endl;
cout<<"按 2 键以学号进行查询"<<endl;
cout<<"按 3 键退出查询"<<endl;
cin>>con;
if(con==1)
{ cout<<"请输入要查询学生的姓名:";
cin>>n;
for(i=0;i<=line_num-1;i++) {
for(j=0;j<=strlen(A[0].name)-1;j++) {
if(A[i].name[j]!=n[j]) break;
}
if(j>=strlen(A[0].name)) {
cout<<"姓名\t学号\t班级\t排名\t语文\t数学\t外语\tC++"<<endl;
cout<<A[i].name<<"\t"<<A[i].num<<"\t"<<A[i].cla
<<"\t"<<A[i].mark[0]<<"\t"<<A[i].mark[1]<<"\t"<<A[i].mark[2]
<<"\t"<<A[i].mark[3]<<"\t"<<A[i].mark[4]<<endl; s=1;
}
}//for
if( s==0) cout<<endl<<"....您要查询的记录不存在!..."<<endl;
query();
}
else if(con==2){
cout<<"请输入要查询学生的学号:";
cin>>m;
for(i=0;i<=line_num-1;i++){
for(j=0;j<=strlen(A[0].num)-1;j++) {
if(A[i].num[j]!=m[j]) break;
}
if(j>=strlen(A[0].num)) {
/* cout<<"姓名 学号 班级 排名 语文 数学 外语 C++"<<endl;
cout<<A[i].name<<" "<<A[i].num<<" "<<A[i].cla
<< " "<<A[i].mark[0]<<" "<<A[i].mark[1]<<" "<<A[i].mark[2]
<<" "<<A[i].mark[3]<<" "<<A[i].mark[4]<<endl; s=1;*/
cout<<"姓名\t学号\t班级\t排名\t语文\t数学\t外语\tC++"<<endl;
cout<<A[i].name<<"\t"<<A[i].num<<"\t"<<A[i].cla
<<"\t"<<A[i].mark[0]<<"\t"<<A[i].mark[1]<<"\t"<<A[i].mark[2]
<<"\t"<<A[i].mark[3]<<"\t"<<A[i].mark[4]<<endl; s=1;
}
}
if(s==0) cout<<endl<<"....您要查询的记录不存在!..."<<endl;
query();
}
else if(con==3) readme();
else {
cout<<"请输入正确的操作符!"<<endl; query();
}
}
/*.........................................................................*/
void addrecord()
{ cout<<"................添加界面..............."<<endl;
cout<<"按 1 键进行整体添加(如 张三 1001 4 76 54 23 98)"<<endl;
cout<<"按 2 键进行分别添加"<<endl;
cout<<"按 3 键退出添加"<<endl;
cout<<"按 4 键继续添加"<<endl;
int i;
cin>>i;
line_num++;
if(i==2){
cout<<endl<<"请输入学生姓名:";
cin>>A[line_num-1].name;
cout<<endl<<"请输入学生学号:";
cin>>A[line_num-1].num;
cout<<endl<<"请输入学生班级:";
cin>>A[line_num-1].cla;
cout<<endl<<"请输入语文成绩:";
cin>>A[line_num-1].mark[1];
cout<<endl<<"请输入数学成绩:";
cin>>A[line_num-1].mark[2];
cout<<endl<<"请输入英语成绩:";
cin>>A[line_num-1].mark[3];
cout<<endl<<"请输入C++成绩:";
cin>>A[line_num-1].mark[4];
addrecord();
}
else if(i==1){
cin>>A[line_num-1].name;
cin>>A[line_num-1].num;
cin>>A[line_num-1].cla;
//cin>>A[line_num-1].mark[0];
cin>>A[line_num-1].mark[1];
cin>>A[line_num-1].mark[2];
cin>>A[line_num-1].mark[3];
cin>>A[line_num-1].mark[4];
addrecord();
}
else if(i==3){
line_num--;
readme();
}
else if(i==4) addrecord();
else {
cout<<endl<<"控制符输入错误";
addrecord();
}
}
///
void display(){
int i;
cout<<"姓名\t学号\t班级\t排名\t语文\t数学\t外语\tC++"<<endl;
// cout<<"姓名 学号 班级 排名 语文 数学 外语 C++"<<endl;
for(i=0;i<=line_num-1;i++)
cout<<A[i].name<<"\t"<<A[i].num<<"\t"<<A[i].cla
<<"\t"<<A[i].mark[0]<<"\t"<<A[i].mark[1]<<" "<<A[i].mark[2]
<<" "<<A[i].mark[3]<<" "<<A[i].mark[4]<<endl; // s=1;
// cout<<A[i].name<<" "<<A[i].num<<" "<<A[i].cla<<" "<<A[i].mark[0]<<" "<<A[i].mark[1]<<" "<<A[i].mark[2]
// <<" "<<A[i].mark[3]<<" "<<A[i].mark[4]<<endl;
rewind(fp);
readme();
}
/*................................................................................*/
void savechange(){
fclose(fp);
int i;
char ch='\n';
char *c="姓名\t学号\t班级\t排名\t语文\t数学\t外语\tC++";
//char *c="姓名 学号 班级 排名 语文 数学 外语 C++";
char *d="\t";
cout<<"已保存到文件"<<endl;
if((fp=fopen(filename,"wt"))==NULL){
cerr<<"open unsuccessful";
exit(-1);
}
fclose(fp);
if((fp=fopen(filename,"a"))==NULL){
cerr<<"open unsuccessful";
exit(-1);
}
//cout<<"in 2"<<endl;
fprintf(fp,"%s",c);
fprintf(fp,"%c",ch);
for(i=0;i<=line_num-1;i++){
fprintf(fp,"%s",A[i].name);
fprintf(fp,"%s",d);
fprintf(fp,"%s",A[i].num);
fprintf(fp,"%s",d);
fprintf(fp,"%s",A[i].cla);
fprintf(fp,"%s",d);
fprintf(fp,"%d",A[i].mark[0]);
fprintf(fp,"%s",d);
fprintf(fp,"%d",A[i].mark[1]);
fprintf(fp,"%s",d);
fprintf(fp,"%d",A[i].mark[2]);
fprintf(fp,"%s",d);
fprintf(fp,"%d",A[i].mark[3]);
fprintf(fp,"%s",d);
fprintf(fp,"%d",A[i].mark[4]);
if(i!=line_num-1)
fprintf(fp,"%c",ch);
}
fclose (fp);
readme();
}
/*................................................................*/
void deleterecord(){
int i,j,con=0,k,l,s=0;
if(line_num==0) { cout<<"记录已为空,不能再删除"; readme(); }
cout<<endl<<"..."<<line_num<<endl;
cout<<"...............删除操作界面................"<<endl;
cout<<"按 1 键以姓名进行删除"<<endl;
cout<<"按 2 键以学号进行删除"<<endl;
cout<<"按 3 键退出删除操作"<<endl;
cout<<"按 4 键继续进行删除操作"<<endl;
cin>>con;
char n[9];
char m[10];
if(con==1)
{ cout<<"请输入要删除学生的姓名:";
cin>>n;
line_num--;
for(i=0;i<=line_num-1;i++) {
for(j=0;j<=strlen(A[0].name)-1;j++) {
if(A[i].name[j]!=n[j]) break;
}
if(j==strlen(A[0].name)) {
s=1; cout<<"已成功删除"<<endl;
for(k=i;k<=line_num-2;k++){
for(l=0;l<=9;l++)
A[k].num[l]=A[k+1].num[l];
for(l=0;l<=8;l++)
A[k].name[l]=A[k+1].name[l];
for(l=0;l<=3;l++)
A[k].cla[l]=A[k+1].cla[l];
A[k].mark[1]=A[k+1].mark[1]; A[k].mark[2]=A[k+1].mark[2];
A[k].mark[3]=A[k+1].mark[3]; A[k].mark[4]=A[k+1].mark[4];
}
} //if
}
if(s==0) cout<<endl<<"....您要删除的记录不存在!..."<<endl;
deleterecord();
}
else if(con==2)
{
cout<<"请输入要删除学生的学号:";
cin>>m;
line_num--;
for(i=0;i<=line_num-1;i++){
for(j=0;j<=strlen(A[0].num)-1;j++) {
if(A[i].num[j]!=m[j]) break;
}
if(j==strlen(A[0].num)) {
s=1; cout<<"已成功删除"<<endl;
for(k=i;k<=line_num-1;k++){
for(l=0;l<=9;l++)
A[k].num[l]=A[k+1].num[l];
for(l=0;l<=8;l++)
A[k].name[l]=A[k+1].name[l];
for(l=0;l<=3;l++)
A[k].cla[l]=A[k+1].cla[l];
A[k].mark[1]=A[k+1].mark[1]; A[k].mark[2]=A[k+1].mark[2];
A[k].mark[3]=A[k+1].mark[3]; A[k].mark[4]=A[k+1].mark[4];
} //for
} //if
}
if(s==0) cout<<endl<<"....您要删除的记录不存在!..."<<endl;
deleterecord();
}
else if(con==3) { readme(); }
else if(con==4) deleterecord();
else {
cout<<"请输入正确的操作符!"<<endl; query();
}
}
///////
void sortrecord()
{
int i,j=0,temp,a[60],k=0,l,n,m;
Student B;
cout<<"...............排序操作界面................"<<endl;
cout<<"按 1 键以总成绩进行排序"<<endl;
cout<<"按 2 键退出排序操作"<<endl;
cout<<"按 3 键继续进行排序操作"<<endl;
cin>>n;
if(n==1)
{
for(i=0;i<=line_num-1;i++)
A[i].mark[0]=A[i].mark[1]+A[i].mark[2]+A[i].mark[3]+A[i].mark[4];
for(l=0;l<=line_num-1;l++){
temp=A[0].mark[0];
for(i=0;i<=line_num-1;i++){
if(A[i].mark[0]>=temp) {
temp=A[i].mark[0]; j=i;
}
}
a[k++]=j; A[j].mark[0]=0;
}//for
k=1;
for(i=0;i<=line_num-1;i++){
for(l=0;l<=line_num-1;l++){
if(a[i]==l) A[l].mark[0]=k++;
}
}
k=0; //display();
/* for(i=0;i<=line_num-1;i++) {
for(j=0;j<=line_num-1;j++){
if(A[j].mark[0]==(k+1)){ cout<<endl<<"..."<<j<<"..."<<k<<endl;
for(l=0;l<=9;l++)
{ B.num[l]=A[k].num[l]; A[k].num[l]=A[j].num[l]; A[k].num[l] =B.num[l]; }
for(l=0;l<=8;l++)
{B.name[l]=A[k].name[l]; A[k].name[l]=A[j].name[l]; A[k].name[l] =B.name[l]; }
for(l=0;l<=3;l++)
{B.cla[l]=A[k].cla[l]; A[k].cla[l]=A[j].cla[l]; A[k].cla[l] =B.cla[l]; }
for(l=0;l<=4;l++)
{ B.mark[l]=A[k].mark[l]; A[k].mark[l]=A[j].mark[l]; A[k].mark[l] =B.mark[l];}
k++;
} //if
}
} */
sortrecord();
}//if
if(n==2) readme();
if(n==3) sortrecord();
}
//////////
/*............copyright reserved ......2006-6-9........xiangda 530工作室..............*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -