⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chengji1.cpp

📁 用C语言编写的成绩查询系统
💻 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 + -