📄 c语言成绩记录查询系统.cpp
字号:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(info)
typedef struct info
{
long int num;
char name[20];
int score;
info *next;
};
void create();
void save(long,char [20],int);
void save_(info *head);
void print();
void print_(int);
info *read();
void search();
void delete_();
void amend();
info *order(info *head);
void sort();
/*主函数*/
int main()
{
int n;
char action[2];
printf("\n\n\t\t欢迎使用c语言成绩记录查询系统!\n\n"
"\n\n\n\t\t按回车键进入系统..."); /*按任一键进入主菜单*/
getchar(); /*从键盘读取一个字符,但不显示于屏幕*/
while(1)
{
do
{
system("cls");
printf("~~~~~~~~~~~~~~~~~~~~~~目录~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"
"\n\t a、添加学生成绩记录"
"\n\t o、显示输出所有学生的成绩"
"\n\t s、按学号或姓名查询学生成绩"
"\n\t d、按学号或姓名删除学生成绩"
"\n\t m、修改指定学生的成绩"
"\n\t r、显示各分数段的学生成绩记录"
"\n\t e、退出系统"
"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
"\n\t请选择您要进行的操作:");
gets(action);
}while(action[0]==!'e'&&action[1]=='\0');
if(action[0]=='e'&&action[1]=='\0')
{
system("cls");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
"\t\t 谢谢使用c语言成绩记录查询系统!\n\n"
"\n\n\n\t\t按回车键确认结束...");
getchar();
exit(0);
}
if(action[0]=='a'&&action[1]=='\0')
create();
if(action[0]=='o'&&action[1]=='\0')
print();
if(action[0]=='s'&&action[1]=='\0')
search();
if(action[0]=='d'&&action[1]=='\0')
delete_();
if(action[0]=='m'&&action[1]=='\0')
amend();
if(action[0]=='r'&&action[1]=='\0')
sort();
}
return(0);
}
/*添加学生成绩记录*/
void create()
{
info *head,*head_,*p_,*p,*q;
char number[20],score[20];
int i,k,w;
system("cls");
head_=read();
p=q=(info *)malloc(LEN);
do
{
printf("输入学号:(若要结束请输入e)");
gets(number);
if(strlen(number)==1&&number[0]=='e')
break;
k=1;
for(i=0;i<strlen(number);i++)
{
if(number[i]<'0'||number[i]>'9')
{
printf("学号输入错误,请重新输入:");
k=0;
break;
}
}
w=1;
if(head_!=NULL)
{
if(atol(number)==head_->num)
{
k=0;
w=0;
printf("学号输入重复,请重新输入:");
}
if(w!=0)
{
p_=head_->next;
while(p_!=NULL)
{
if(atol(number)==p_->num)
{
k=0;
printf("学号输入重复,请重新输入:");
break;
}
p_=p_->next;
}
}
}
}while(k==0);
p->num=atol(number);
if(p->num!=0)
{
printf("输入名字:");
gets(p->name);
for(;;)
{
do
{
printf("输入成绩:");/*提示开始输入成绩*/
gets(score);
k=1;
for(i=0;i<strlen(score);i++)
{
if(score[i]<'0'||score[i]>'9')
{
printf("成绩输入错误,请重新输入:");
k=0;
break;
}
}
}while(k==0);
p->score=atoi(score);
if(p->score>=0&&p->score<=100)
break;
printf("成绩输入错误,请重新输入:");
}
head=p;
save(p->num,p->name,p->score);
}
while(p->num!=0)
{
system("cls");
head_=read();
q->next=p;
q=p;
p=(info *)malloc(LEN);
do
{
printf("输入学号:(请以输入e)");
gets(number);
if(strlen(number)==1&&number[0]=='e')
break;
k=1;
for(i=0;i<strlen(number);i++)
{
if(number[i]<'0'||number[i]>'9')
{
printf("学号输入错误,请重新输入:");
k=0;
break;
}
}
w=1;
if(atol(number)==head_->num)
{
k=0;
w=0;
printf("学号输入重复,请重新输入:");
}
if(w!=0)
{
p_=head_->next;
while(p_!=NULL)
{
if(atol(number)==p_->num)
{
k=0;
printf("学号输入重复,请重新输入:");
break;
}
p_=p_->next;
}
}
}while(k==0);
p->num=atol(number);
if(p->num!=0)
{
printf("输入名字:");
gets(p->name);
for(;;)
{
do
{
printf("输入成绩:");/*提示开始输入成绩*/
gets(score);
k=1;
for(i=0;i<strlen(score);i++)
{
if(score[i]<'0'||score[i]>'9')
{
printf("成绩输入错误,请重新输入:");
k=0;
break;
}
}
}while(k==0);
p->score=atoi(score);
if(p->score>=0&&p->score<=100)
break;
printf("成绩输入错误,请重新输入:");
}
save(p->num,p->name,p->score);
}
q->next=NULL;
}
save_(order(read()));
}
/*保存数据到文件*/
void save(long num,char name[20],int score)
{
FILE *fp; /*定义指向文件的指针*/
if((fp=fopen("record.txt","a+"))==NULL) /*为输出打开一个文本文件*/
{
printf("对不起,打不开文件!\n");
return; /*若打不开则返回菜单*/
}
else
{
fprintf(fp,"%-10ld%-20s%3d\n",num,name,score); /*写入一条记录*/
}
fclose(fp); /*关闭文件*/
}
/*保存数据到文件*/
void save_(info *head)
{
FILE *fp; /*定义指向文件的指针*/
info *p; /* 定义移动指针*/
if((fp=fopen("record.txt","w+"))==NULL) /*为输出打开一个文本文件*/
{
printf("对不起,打不开文件!\n");
}
printf("\n保存中...\n");
p=head; /*移动指针从头指针开始*/
while(p!=NULL)
{
fprintf(fp,"%-10ld%-20s%3d\n",p->num,p->name,p->score); /*写入一条记录*/
p=p->next; /*指针后移*/
}
fclose(fp); /*关闭文件*/
printf("\t保存成功!按回车键结束...\n");
getchar();
}
/*读取学生成绩*/
info *read()
{
info *head=NULL,*p,*q;
FILE *fp;
if((fp=fopen("record.txt","r+"))!=NULL) /*为输出打开一个文本文件*/
{
fscanf(fp,"\n");
if(!feof(fp))
{
p=(info *)malloc(LEN);
fscanf(fp,"%ld%s%d\n",&p->num,&p->name,&p->score); /*写入一条记录*/
head=q=p; /*移动指针从头指针开始*/
while(!feof(fp))
{
p=(info *)malloc(LEN);
fscanf(fp,"%ld%s%d\n",&p->num,&p->name,&p->score); /*写入一条记录*/
q->next=p; /*指针后移*/
q=p;
}
p->next=NULL;/*链表结束*/
}
}
fclose(fp); /*关闭文件*/
return(head);
}
/*显示输出所有学生的成绩*/
void print()
{
int i=0; /* 统计记录条数*/
info *head,*p,*q; /*移动指针*/
head=order(read());
system("cls");
if(head==NULL)
printf("\n\n\t打不开文件或文件为空文件...");
else
{
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" 学号 姓名 分数 \n");
p=head;
do
{
i++;
printf(" %-3d %-6d %-20s %-3d \n",i, p->num,p->name,p->score);
p=p->next;
}while(p!=NULL);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
printf("\n\n\t请以回车键结束...");
getchar();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -