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

📄 c语言成绩记录查询系统.cpp

📁 一个学生成绩管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -