📄 chengji1.cpp
字号:
#include <stdio.h>
#include <io.h>
#include <string.h>
#include <stdlib.h>
void Query(char *Name,int Course);
void Total(char *Name);
void Average(int Course);
void Add(char *CJ);
void Change(char *Name,int Course,char *XCJ);
void Delete(char *Name);
void TrimRight(char *Buf);
void main()
{ char Name[7];
int Course;
int Item;
while(1)
{ printf("*****************************\n");
printf("电信052 学号05054229 杨宝春制\n");
printf("简易成绩查询\n");
printf("*****************************\n");
printf("1、查询结果\n2、修改&增加数据\n3、计算个人总分\n4、计算单科平均\n5、退出系统\n");
printf("*****************************\n请选择:");
scanf("%d",&Item);
if(Item==1)
{ printf("请输入姓名:");
scanf("%s",Name);
printf("1、数学,2、物理,3、化学成绩\n请选择:");
scanf("%d",&Course);
Query(Name,Course);
}
else if(Item==2)
{printf("1、新增,2、修改,3、删除\n请选择:");
scanf("%d",&Item);
if(Item==1)
{ char CJ[20];
printf("请输入:姓名数学成绩物理成绩(例如:吴七123456789)\n");
scanf("%s",CJ);
Add(CJ);
}
else if(Item==2)
{ printf("请输入姓名:");
scanf("%s",Name);
printf("1、数学,2、物理,3、化学\n请选择:");
scanf("%d",&Course);
char XCJ[3];
printf("请输入新成绩:");
scanf("%s",XCJ);
Change(Name,Course,XCJ);
}
else
{ printf("请输入姓名:");
scanf("%s",Name);
Delete(Name);
}
}
else if(Item==3)
{ printf("请输入姓名:");
scanf("%s",Name);
char buf[100];
FILE *fp=fopen("data.txt","r");
while(fgets(buf,7,fp)!=NULL)
{ TrimRight(buf);
if(strcmp(buf,Name)==0)
{ int Count=0;
for(int i=0;i<3;i++)
{ fgets(buf,4,fp);
Count+=atoi(buf);
}
printf("总成绩为:%d\n",Count);
break;
}
else fseek(fp,11,1);
}
fclose(fp);
}
else if(Item==4)
{ printf("1、数学,2、物理,3、化学\n请选择:");
scanf("%d",&Course);
Average(Course);
}
else break;
}
}
void Query(char *Name,int Course)
{ char buf[1000];
FILE *fp=fopen("data.txt","r");
while(fgets(buf,7,fp)!=NULL) //名字是6个字节,但另外还应该加1
{ TrimRight(buf); //去掉名字里的空格
if(strcmp(buf,Name)==0)
{ printf(strcat(Name,"的"));
if(Course==1)
{ fgets(buf,4,fp);
printf("数学成绩为:%s\n",buf);
}
else if(Course==2)
{ fseek(fp,3,1);
fgets(buf,4,fp);
printf("物理成绩为:%s\n",buf);
}
else
{ fseek(fp,6,1);
fgets(buf,4,fp);
printf("化学成绩为:%s\n",buf);
}
return;
}
else fseek(fp,11,1); //当第一行没有找到,则要转到第二行,
} //因为成绩是有9个字节,但回车还要2个
printf("查无此人!\n"); //字节,所以是再移9+2=11即可
fclose(fp);
}
void Average(int Course)
{ char buf[100];
FILE *fp=fopen("data.txt","r");
int Count=0;
int RS=0;
while(fgets(buf,7,fp)!=NULL)
{ RS++;
if(Course==2) fseek(fp,3,1);
fgets(buf,4,fp);
Count+=atoi(buf);
fgets(buf,17,fp);
}
if(Course==1) printf("数学的");
else if(Course==2) printf("物理的");
else printf("化学的");
printf("平均成绩为:%d\n",Count/RS);
fclose(fp);
}
void Add(char *CJ)
{ FILE *fp=fopen("data.txt","a+");
fputs(strcat(CJ,"\n"),fp);
fclose(fp);
printf("完成增加!\n");
}
void Change(char *Name,int Course,char *XCJ)
{ char buf[100];
FILE *fp=fopen("data.txt","r+");
TrimRight(buf);
while(fgets(buf,7,fp)!=NULL)
{ if(strcmp(buf,Name)==0)
{printf(strcat(Name,"的"));
if(Course==1)
{
fputs(XCJ,fp);
printf("数学成绩修改为:%s\n",XCJ);
}
else if(Course==2)
{
fseek(fp,3,1);
fputs(XCJ,fp);
printf("物理成绩修改为:%s\n",XCJ);
}
else
{
fseek(fp,6,1);
fputs(XCJ,fp);
printf("化学成绩修改为:%s\n",XCJ);
}
fclose(fp);
return;
}
else fseek(fp,11,1);
}
printf("查无此人!\n");
fclose(fp);
}
void Delete(char *Name)
{ char buf[100];
FILE *fp=fopen("data.txt","r+");
fseek(fp,0,2);
int Length=ftell(fp);
fseek(fp,0,0);
int WriteLoc,ReadLoc;
while(fgets(buf,7,fp)!=NULL)
{ TrimRight(buf);
if(strcmp(buf,Name)==0)
{ fseek(fp,-6,1);
WriteLoc=ftell(fp);
ReadLoc=WriteLoc+17;
while(ReadLoc<Length)
{ fseek(fp,ReadLoc,0);
fgets(buf,20,fp);
fseek(fp,WriteLoc,0);
fputs(buf,fp);
ReadLoc+=17;
WriteLoc+=17;
}
break;
}
else fseek(fp,11,1);
}
fclose(fp);
int handle=open("data.txt",2);
int a=chsize(handle,Length-17);
close(handle);
}
void TrimRight(char *Buf) //将名字里的空格用“\0”代替
{ int L=strlen(Buf);
for(int i=L-1;i>=0;i--) if(Buf[i]==' ') Buf[i]='\0';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -