C语言课时设计--学生信息管理

                                               学生成绩信息系统

今天要写的这篇博客是关于大一期间的c语言课时设计,那个时候对于程序的编写能力真是太差了,现在自己去翻这篇学生成绩管理系统都觉得特别难看,但是应某个同学的邀请,还是把这篇博客写出来,希望给刚入门的同学一个好的指导。

对于c语言来说是很多大佬都会推荐的初学者最适合学习的语言,因为他的很多语法规范还是比教容易掌握的,在这里我们就从各种语法上来说一下这个学生成绩管理系统所用到的语法结构(接下来你看到的这个程序是没有进行重构和文件类型的操作的,重构将会在之后的博客中写到)

1.我们先来看一下主界面,我选择了蓝色,看起来还不错,从主界面的菜单我们大致可以看出来这个程序的具体功能:登记、删除、查询、修改、显示、排序、统计、排序、保存、选分以及系统信息的操作

实现也很容易,写几条printf语句就ok了

void menu() 
{ 
system("color 3f");//背景颜色为蓝色
printf("   *********************************************************************************\n"); 
printf("   *\t1登记学生资料\t\t\t\t\t2删除学生资料\t\t   *\n"); 
printf("   *\t3查询学生资料\t\t\t\t\t4修改学生资料\t\t\   *\n"); 
printf("   *\t5显示学生资料\t\t\t\t\t6统计学生资料\t\t   *\n"); 
printf("   *\t7排序语文成绩\t\t\t\t\t8排序数学成绩\t\t   *\n");
printf("   *\t9排序英语成绩\t\t\t\t\t10选出分段分数\t\t   *\n");
printf("   *\t11保存学生资料\t\t\t\t\t12系统信息\t\t   *\n");
printf("   *\t0退出系统\t\t\t\t\t\t\t\t   *\n "); 
printf("   *********************************************************************************\n");
} 

效果如下:

2.然后就是各项功能了,我们从登记开始(需要注意的是:设置学生性别,总不能可以为人妖吧,另外成绩不可能为负,也不可能超过100,然后就是学号的设置,不能位数太多,在代码中都有注释,所以不在这里一一展开,仅作提醒内容。):

oid Add(Link l)   {                                    // 增加学生资料  
    Node *p,*r,*s; 
    char num[10];                                       //限制学号长度 
	r=l;
    s=l->next; 
    while(r->next!=NULL) 
    r=r->next;                                           //将指针置于最末尾
	printf("\n\t\t\t====================添加学生资料====================\n\n");                                         
while(1)  { 
    printf("请你输入学号(以'0'返回上一级菜单:)"); 
    scanf("%s", num); 
    if(strcmp(num,"0")==0) 
    
    break; 
    while(s) 
	   { 
       if(strcmp(s->data.num,num)==0)  { 
            printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num);  
            printstart(); 
            printc(); 
            printe(s); 
            printstart(); 
            printf("\n"); 
            return; 
            } 
        s=s->next; 
        } 
        
p=(Node *)malloc(sizeof(Node));
	int count; 
    strcpy(p->data.num,num);
	printf("请你输入姓名:");                                    //输入姓名 
    scanf("%s",p->data.name); 
    getchar(); 
    printf("请你输入性别:");                                                            //输入性别 
    scanf("%s",p->data.sex);
    
	count=0;
while(strcmp(p->data.sex,"男")!=0 && strcmp(p->data.sex,"女")!=0)
       { 
	      count++;
	      printf ("您的输入有误\n");
	      printf ("请您重新输入性别:\n" );
	      scanf("%s",p->data.sex);
	      if(count==3)
	      return;
       } 
    
    getchar(); 
    printf("请你输入语文成绩:");                               //输入语文成绩 
    scanf("%d",&p->data.cgrade); 
    
    count=0;
while(p->data.cgrade<0 || p->data.cgrade>100){ 
	       count++;
	       printf ("您的输入有误\n");
	       printf ("请您重新输入语文成绩:\n" );
	       scanf("%d",&p->data.cgrade);
	       if(count==3) 
		        return;
    } 
    
    getchar(); 
    printf("请你输入数学成绩:");                                //输入数学成绩 
    scanf("%d",&p->data.mgrade); 
while(p->data.mgrade<0 || p->data.mgrade>100){ 
	       count++;
	       printf ("您的输入有误\n");
	       printf ("请您重新输入数学成绩:\n" );
	       scanf("%d",&p->data.mgrade);
	       if(count==3) 
		        return;
    } 
    getchar(); 
    printf("请你输入英语成绩:");                                 //输入英语成绩 
    scanf("%d",&p->data.egrade); 
while(p->data.egrade<0 || p->data.egrade>100){ 
	        count++;
	        printf ("您的输入有误\n");
	        printf ("请您重新输入英语成绩:\n" );
	        scanf("%d",&p->data.egrade);
	        if(count==3) 
			    return;
    } 
    getchar(); 
    p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;   //计算总成绩 
    p->data.ave=p->data.totle / 3;                                // 计算平均成绩 

//信息输入已经完成    

    p->next=NULL; 
    r->next=p; 
    r=p; 
    shoudsave=1; 
} 
} 

效果如下:

下一步便是统计了,在统计中实现的功能便是最高分是谁,某一科的最高分是谁,平均分最高分是谁:

void Tongji(Link l)  {                                        //统计学生资料 

    Node *pm,*pe,*pc,*pt,*pa;                                     //用于指向分数最高的接点 
    Node *r=l->next;
	printf("\n\t\t\t====================统计学生资料====================\n\n");  
        if(!r)  
         {   
            printf("\n=====>提示:没有资料可以统计!\n");
			printf("\n=====>请选择其他操作(“0”退出系统):\n\n\n");  
            return ;   
         }   
         pm=pe=pc=pt=pa=r;   
          while(r!=NULL)  
           {   
            if(r->data.cgrade>=pc->data.cgrade)  
            pc=r;   
            if(r->data.mgrade>=pm->data.mgrade) 
            pm=r;   
            if(r->data.egrade>=pe->data.egrade)  
            pe=r;   
            if(r->data.totle>=pt->data.totle)  
            pt=r;   
            if(r->data.ave>=pa->data.ave)  
            pa=r;       
            r=r->next;  
           }   
        printf("\n\n------------------------------统计结果--------------------------------\n");  
        printf("\t\t\t总分最高者:\t%s   %d分\n",pt->data.name,pt->data.totle);  
        printf("\t\t\t平均分最高者:\t%s   %d分\n",pa->data.name,pa->data.ave);    
        printf("\t\t\t英语最高者:\t%s   %d分\n",pe->data.name,pe->data.egrade);  
        printf("\t\t\t数学最高者:\t%s   %d分\n",pm->data.name,pm->data.mgrade);  
        printf("\t\t\t语文最高者:\t%s   %d分\n",pc->data.name,pc->data.cgrade);  
        printstart(); 
	 printf("\n\n\n已为您返回主菜单,请选择你要进行的操作:\n\n\n");	 
}   

效果如下:

再往后的代码就不在一一展示,只放一下运行效果图:

查找的效果图如下(请注意,可以分为学号查找和姓名查找):

显示学生信息效果如下:

保存学生信息效果如下:

修改学生信息效果如下:

按分数段选择学生效果如下:

当然除了这些还有就是排序,排序在这里不在放效果图。

总之,有心的小伙伴会发现整个都是用链表在起作用,也就是没有放在文件中,这就会导致程序关闭之后无法保存数据,再次打开就没有了,那怎么样处理呢,其实比较简单,把录入的数据存入文件中即可,在这里不在演示。有兴趣的小伙伴可以私下交流。

最后看一下我的整个代码:

#include "stdio.h"
#include "stdlib.h" 
#include "string.h" 
int shoudsave=0;
//学生资料结构体 

struct student 
{ 
char num[15];                             // 学号 
char name[20];                            // 姓名 
char sex[4];                              // 性别  
int cgrade;                               // 语文成绩 
int mgrade;                               // 数学成绩     
int egrade;                               // 英语成绩 
int totle;                                // 总分 
int ave;                                  //平均分 
char neartime[10];                        //最近更新时间
}; 

typedef struct node 
 {  
struct student data;
 
struct node  *next; 
}
Node,* Link;

void menu() 
{ 
system("color 3f");
printf("   *********************************************************************************\n"); 
printf("   *\t1登记学生资料\t\t\t\t\t2删除学生资料\t\t   *\n"); 
printf("   *\t3查询学生资料\t\t\t\t\t4修改学生资料\t\t\   *\n"); 
printf("   *\t5显示学生资料\t\t\t\t\t6统计学生资料\t\t   *\n"); 
printf("   *\t7排序语文成绩\t\t\t\t\t8排序数学成绩\t\t   *\n");
printf("   *\t9排序英语成绩\t\t\t\t\t10选出分段分数\t\t   *\n");
printf("   *\t11保存学生资料\t\t\t\t\t12系统信息\t\t   *\n");
printf("   *\t0退出系统\t\t\t\t\t\t\t\t   *\n "); 
printf("   *********************************************************************************\n");
} 
// 分割线 显示 
void printstart()
    { 
     printf("----------------------------------------------------------------------------\n");
    } 
 //报错显示 
void Wrong() 
    { 
     printf("\n\t\t\t====================错误提示====================\n\n\a");
     printf("\n=====>提示:输入错误!\n");
     printf("\n=====>提示:请选择其他操作(“0”退出系统):\n\n");
    }
//找不到数据表示 
void Nofind()
    {
	 printf("\n\t\t\t====================错误提示====================\n\n\a"); 
     printf("\n=====>提示:没有找到该学生!\n");
	 printf("\n=====>提示:请选择其他操作(“0”退出系统):\n\n"); 
    } 
//输出表格项目内容 
void printc()  
     { 
      printf("学号\t       姓名\t性别 语文成绩 数学成绩 英语成绩 总分 平均分\n"); 
     } 
//输出学生相应数据 
void printe(Node *p)
     { 
      printf("%-15s%s\t%s\t%d\t%d\t%d\t%d\t%d\n",p->data.num,p->data.name,p->data.sex,p->data.cgrade,p->data.mgrade,p->data.egrade,p->data.totle,p->data.ave); 
     } 
// 定位链表中符合要求的接点,并返回该指针
Node* Locate(Link l,char findmess[],char nameornum[] )
{
      Node *r; 
      if(strcmp(nameornum,"num")==0) {                         //按学号查询 
        r=l->next; 
        while(r!=NULL) 
        { 
          if(strcmp(r->data.num,findmess)==0) 
          return r; 
          r=r->next; 
        } 
    } 
         else if(strcmp(nameornum,"name")==0)                   //按姓名查询
        {  
           r=l->next; 
           while(r!=NULL)  { 
               if(strcmp(r->data.name,findmess)==0) 
                return r; 
                r=r->next; 
             } 
        }           
return 0   ; 
}
void Add(Link l)   {                                    // 增加学生资料  
    Node *p,*r,*s; 
    char num[10];                                       //限制学号长度 
	r=l;
    s=l->next; 
    while(r->next!=NULL) 
    r=r->next;                                           //将指针置于最末尾
	printf("\n\t\t\t====================添加学生资料====================\n\n");                                         
while(1)  { 
    printf("请你输入学号(以'0'返回上一级菜单:)"); 
    scanf("%s", num); 
    if(strcmp(num,"0")==0) 
    
    break; 
    while(s) 
	   { 
       if(strcmp(s->data.num,num)==0)  { 
            printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num);  
            printstart(); 
            printc(); 
            printe(s); 
            printstart(); 
            printf("\n"); 
            return; 
            } 
        s=s->next; 
        } 
        
p=(Node *)malloc(sizeof(Node));
	int count; 
    strcpy(p->data.num,num);
	printf("请你输入姓名:");                                    //输入姓名 
    scanf("%s",p->data.name); 
    getchar(); 
    printf("请你输入性别:");                                                            //输入性别 
    scanf("%s",p->data.sex);
    
	count=0;
while(strcmp(p->data.sex,"男")!=0 && strcmp(p->data.sex,"女")!=0)
       { 
	      count++;
	      printf ("您的输入有误\n");
	      printf ("请您重新输入性别:\n" );
	      scanf("%s",p->data.sex);
	      if(count==3)
	      return;
       } 
    
    getchar(); 
    printf("请你输入语文成绩:");                               //输入语文成绩 
    scanf("%d",&p->data.cgrade); 
    
    count=0;
while(p->data.cgrade<0 || p->data.cgrade>100){ 
	       count++;
	       printf ("您的输入有误\n");
	       printf ("请您重新输入语文成绩:\n" );
	       scanf("%d",&p->data.cgrade);
	       if(count==3) 
		        return;
    } 
    
    getchar(); 
    printf("请你输入数学成绩:");                                //输入数学成绩 
    scanf("%d",&p->data.mgrade); 
while(p->data.mgrade<0 || p->data.mgrade>100){ 
	       count++;
	       printf ("您的输入有误\n");
	       printf ("请您重新输入数学成绩:\n" );
	       scanf("%d",&p->data.mgrade);
	       if(count==3) 
		        return;
    } 
    getchar(); 
    printf("请你输入英语成绩:");                                 //输入英语成绩 
    scanf("%d",&p->data.egrade); 
while(p->data.egrade<0 || p->data.egrade>100){ 
	        count++;
	        printf ("您的输入有误\n");
	        printf ("请您重新输入英语成绩:\n" );
	        scanf("%d",&p->data.egrade);
	        if(count==3) 
			    return;
    } 
    getchar(); 
    p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;   //计算总成绩 
    p->data.ave=p->data.totle / 3;                                // 计算平均成绩 

//信息输入已经完成    

    p->next=NULL; 
    r->next=p; 
    r=p; 
    shoudsave=1; 
} 
} 
void Qur(Link l)  {                                         //查询学生资料 
    int sel; 
    char findmess[20];                                        //定义findmess数组 
    Node *p; 
    printf("\n\t\t\t====================查找学生资料====================\n\n"); 
    if(!l->next) 
       { 
         printf("\n=====>提示:没有资料可以查询!\n");
		 printf("\n=====>请选择其他操作(“0”退出系统):\n\n\n"); 
         return ;  
       } 
    printf("\n=====>1按学号查找\n=====>2按姓名查找\n"); 
    scanf("%d",&sel); 
    if(sel==1)                                            //判断选择的查询方式为学号查询 
      { 
        printf("请你输入要查找的学号:"); 
        scanf("%s",findmess);                                 
        p=Locate(l,findmess,"num"); 
           if(p) 
            { 
              printf("\t\t\t\t查找结果\n"); 
              printstart(); 
              printc(); 
              printe(p); 
              printstart(); 
            } 
            else 
            Nofind(); 
      } 
    else if(sel==2)                                          //判断选择的查询方式为姓名查询 
      { 
        printf("请你输入要查找的姓名:"); 
        scanf("%s",findmess); 
        p=Locate(l,findmess,"name");  
            if(p) 
			  { 
               printf("\t\t\t\t查找结果\n"); 
               printstart(); 
               printc(); 
               printe(p); 
               printstart(); 
              } 
            else 
            Nofind(); 
      } 
    else 
    Wrong();
    printf("\n\n\n已为您返回主菜单,请选择你要进行的操作(“0”可退出系统):\n\n\n");
    
    
    
}  
void Del(Link l)     {                                           // 删除学生资料 
      
    int sel; 
    Node *p,*r; 
    printf("\n\t\t\t====================删除学生资料====================\n\n"); 
    char findmess[20]; 
        if(!l->next) 
           { 
             printf("\n=====>提示:没有资料可以删除!\n");
             printf("\n=====>请选择其他操作(“0”退出系统):\n\n\n");
             return; 
           } 
        printf("\n=====>1按学号删除\n=====>2按姓名删除\n\n\n"); 
        scanf("%d",&sel); 
            if(sel==1) 
			 {
              printf("请你输入要删除的学号:"); 
              scanf("%s",findmess); 
              p=Locate(l,findmess,"num"); 
                if(p) 
                   { 
                    r=l; 
                    while(r->next!=p) 
                    r=r->next; 
                    r->next=p->next; 
                    free(p);
                    printf("\n=====>提示:该学生已经成功删除!\n");  
                    shoudsave=1;  
                   }  
                else   
                Nofind();   
             }   
            else if(sel==2)  
             {   
               printf("请你输入要删除的姓名:");  
               scanf("%s",findmess);   
               p=Locate(l,findmess,"name");  
                if(p) 
                   { 
                    r=l; 
                    while(r->next!=p) 
                    r=r->next; 
                    r->next=p->next; 
                    free(p);
                    printf("\n=====>提示:该学生已经成功删除!\n");  
                    shoudsave=1;  
                   }  
                else   
                Nofind();   
             }   
            else  
            Wrong();  
} 
void Modify(Link l)     {                                          //修改学生资料 
  
    Node *p;  
    char findmess[20]; 
    printf("\n\t\t\t====================修改学生资料====================\n\n"); 
       if(!l->next) 
         { 
           printf("\n=====>提示:没有资料可以修改!\n"); 
           printf("\n=====>请选择其他操作(“0”退出系统):\n\n\n");
           return; 
         } 
            printf("请你输入要修改的学生学号:"); 
            scanf("%s",findmess); 
            p=Locate(l,findmess,"num"); 
              if(p) 
               {   
                 printf("请你输入新学号(原来是%s):",p->data.num);  
                 scanf("%s",p->data.num);   
                 printf("请你输入新姓名(原来是%s):",p->data.name);  
                 scanf("%s",p->data.name);  
                 getchar();   
                 printf("请你输入新性别(原来是%s):",p->data.sex);  
                 scanf("%s",p->data.sex);   
                 printf("请你输入新的语文成绩(原来是%d分):",p->data.cgrade);  
                 scanf("%d",&p->data.cgrade);  
                 getchar();   
                 printf("请你输入新的数学成绩(原来是%d分):",p->data.mgrade);  
                 scanf("%d",&p->data.mgrade);  
                 getchar();   
                 printf("请你输入新的英语成绩(原来是%d分):",p->data.egrade);  
                 scanf("%d",&p->data.egrade);   
                 p->data.ave=p->data.totle/3;   
                 printf("\n=====>提示:资料修改成功!\n\n");
				 printf("\n=====>请从下面的主菜单中继续执行操作:(“0”可退出系统):\n\n");  
                 shoudsave=1;  
                } 
               else   
               Nofind();   
}    
void Disp(Link l)  {                                                 //显示学生资料 
   
    int count=0;  
    Node *p;  
    p=l->next;
	printf("\n\t\t\t====================显示学生资料====================\n\n");   
    if(!p)  
      {   
        printf("\n=====>提示:没有资料可以显示!\n");
		printf("\n=====>请选择其他操作(“0”退出系统):\n\n\n");  
        return;  
      }   
        printf("\n\n\t\t\t\t显示结果\n");  
        printstart();  
        printc();  
        printf("\n");  
     while(p)  
        {   
           printe(p);  
           p=p->next;  
        }   
     printstart();  
     printf("\n");  
     printf("\n\n已为您返回主菜单,请选择你要进行的操作:\n\n\n");
}    
void Tongji(Link l)  {                                        //统计学生资料 

    Node *pm,*pe,*pc,*pt,*pa;                                     //用于指向分数最高的接点 
    Node *r=l->next;
	printf("\n\t\t\t====================统计学生资料====================\n\n");  
        if(!r)  
         {   
            printf("\n=====>提示:没有资料可以统计!\n");
			printf("\n=====>请选择其他操作(“0”退出系统):\n\n\n");  
            return ;   
         }   
         pm=pe=pc=pt=pa=r;   
          while(r!=NULL)  
           {   
            if(r->data.cgrade>=pc->data.cgrade)  
            pc=r;   
            if(r->data.mgrade>=pm->data.mgrade) 
            pm=r;   
            if(r->data.egrade>=pe->data.egrade)  
            pe=r;   
            if(r->data.totle>=pt->data.totle)  
            pt=r;   
            if(r->data.ave>=pa->data.ave)  
            pa=r;       
            r=r->next;  
           }   
        printf("\n\n------------------------------统计结果--------------------------------\n");  
        printf("\t\t\t总分最高者:\t%s   %d分\n",pt->data.name,pt->data.totle);  
        printf("\t\t\t平均分最高者:\t%s   %d分\n",pa->data.name,pa->data.ave);    
        printf("\t\t\t英语最高者:\t%s   %d分\n",pe->data.name,pe->data.egrade);  
        printf("\t\t\t数学最高者:\t%s   %d分\n",pm->data.name,pm->data.mgrade);  
        printf("\t\t\t语文最高者:\t%s   %d分\n",pc->data.name,pc->data.cgrade);  
        printstart(); 
	 printf("\n\n\n已为您返回主菜单,请选择你要进行的操作:\n\n\n");	 
}   
void Chinese(Link l)  {                                      //按语文成绩排序 
   
    Node *p,*q;
    p=q=l->next;
    struct student flag,demo[100];
    int i=0,j = 0;
    printf("\n\t\t\t====================排序语文成绩====================\n\n");
        if(l->next==NULL)
		{
	       printf("\n=====>没有数据可以显示!!!\n");
	       printf("\n=====>选择其他操作(“0”退出系统):\n\n\n");
	       return; 
        }
while(1){
	demo[i] = p->data;
	i++;
	if(p->next==NULL)break;
	else
	p  = p->next;
}
for(j = i-1;j>0;j--){
	for(int k = 0;k<j;k++)
	{
		if(demo[k].cgrade<demo[k+1].cgrade){
			flag = demo[k];
			demo[k] = demo[k+1];
			demo[k+1] = flag;
		}
	}
}
j = 0;
while(1){
	q->data = demo[j];
	j++;
	if(q->next==NULL)break;
	else
	q = q->next;
}
         printf("\n=====>提示:排序已经完成!\n");
		 printf("\n=====>请按“5”查看排序结果(“0”退出系统):\n\n");
		 
} 
void Maths(Link l)      {                                        //按数学成绩排序 

    Node *p,*q;
    p=q=l->next;
    student flag,demo[100];
    int i=0,j = 0;
    printf("\n\t\t\t====================排序数学成绩====================\n\n");
        if(l->next==NULL)
		{
	        printf("\n=====>没有数据可以显示!!!\n");
	        printf("\n=====>请选择其他操作(“0”退出系统):\n\n\n");
			return; 
        }
while(1){
	demo[i] = p->data;
	i++;
	if(p->next==NULL)break;
	else
	p  = p->next;
}
for(j = i-1;j>0;j--){
	for(int k = 0;k<j;k++)
	{
		if(demo[k].mgrade<demo[k+1].mgrade){
			flag = demo[k];
			demo[k] = demo[k+1];
			demo[k+1] = flag;
		}
	}
}
j = 0;
while(1){
	q->data = demo[j];
	j++;
	if(q->next==NULL)break;
	else
	q = q->next;
}
         printf("\n=====>提示:排序已经完成!\n");
		 printf("\n=====>请按“5”查看排序结果(“0”退出系统):\n\n");
 } 
 
 
 
void  English(Link l)      {                         //按英语成绩排序 
    Node *p,*q;
    p=q=l->next;
    student flag,demo[100];
    int i=0,j = 0;
    printf("\n\t\t\t====================排序英语成绩====================\n\n");
        if(l->next==NULL)
		{ 
	        printf("\n=====>没有数据可以显示!!!\n");
	        printf("\n=====>没请选择其他操作(“0”退出系统):\n\n\n");
	         return;
        }
while(1){
	demo[i] = p->data;
	i++;
	if(p->next==NULL)break;
	else
	p  = p->next;
}
for(j = i-1;j>0;j--){
	for(int k = 0;k<j;k++)
	{
		if(demo[k].egrade<demo[k+1].egrade){
			flag = demo[k];
			demo[k] = demo[k+1];
			demo[k+1] = flag;
		}
	}
}
j = 0;
while(1){
	q->data = demo[j];
	j++;
	if(q->next==NULL)break;
	else
	q = q->next;
}
         printf("\n=====>提示:排序已经完成!\n");
		 printf("\n=====>请按“5”查看排序结果(“0”退出系统):\n\n");
} 




void select(Link l) {                                                        //按分数段选学生 
    int i; 
    int j,k; 
    Node *pc =  l;                                           
    Node *r=l->next;                                                         //用于指向分数最高的接点 
	printf("\n\t\t\t====================选出分段分数====================\n\n");
        if(!r)  
          {  
            printf("\n=====>提示:没有资料可以筛选!\n");
			printf("\n=====>请选择其他操作(“0”退出系统):\n\n\n"); 
            return ; 
          } 
          printf("输入课程名1.语文2.数学3.英语"); 
          scanf("%d",&i); 
        if(i==1) 
           { 
            printf("请输入筛选分数的上限(搜索内容将不包括上限):"); 
            scanf("%d",&j); 
            printf("请输入筛选分数的下限(搜索内容将不包括下限):"); 
            scanf("%d",&k); 
 
 printf("------------------------------筛选结果-----------------------------------------------------------\n"); 
 printc(); 
 printstart(); 
           while(r!=NULL) 
             { 
             
               if(k<=(r->data.cgrade)&&(r->data.cgrade)<j) 
               printe(r); 
               r=r->next; 
             } 
          } 
       else if(i==2) 
          { 
            printf("请输入筛选分数的上限:"); 
            scanf("%d",&j); 
            printf("请输入筛选分数的下限:"); 
            scanf("%d",&k); 
 
 printf("------------------------------筛选结果-----------------------------------------------------------\n"); 
 printc(); 
 printstart(); 
 
           while(r!=NULL) 
             { 
               if(k<=(r->data.mgrade)&&(r->data.mgrade)<j) 
               printe(r); 
               r=r->next; 
             } 
          } 
        else if(i==3) 
         { 
            printf("请输入筛选分数的上限:"); 
            scanf("%d",&j); 
            printf("请输入筛选分数的下限:"); 
            scanf("%d",&k); 
 
 printf("------------------------------筛选结果-----------------------------------------------------------\n"); 
 printc();  
 printstart(); 
           while(r!=NULL) 
             { 
               if(k<=(r->data.egrade)&&(r->data.egrade)<j) 
               printe(r); 
               r=r->next; 
             } 
          } 
        else  
        Wrong();
} 
void Save(Link l)  {
 
    FILE* fp;  
    Node  *p;  
    int flag=1,count=0; 
	printf("\n\t\t\t====================保存学生资料====================\n\n"); 
    fp=fopen("d:\\student","wb"); 
    if(fp==NULL) 
     { 
        printf("\n=====>提示:重新打开文件时发生错误!\n");
		exit(1); 
     } 
        p=l->next; 
        while(p) 
        { 
            if(fwrite(p,sizeof(Node),1,fp)==1)
              { 
                 p=p->next; count++; 
			  } 
            else
              {     
                 flag=0; break; 
              } 
        } 
        if(flag) 
        { 
        printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);
		printf("\n=====>请选择其他操作(“0”退出系统):\n\n\n"); 
        shoudsave=0; 
        }
 
        fclose(fp); 
} 
int main() {  

    Link l;                                                                          // 引用链表 
    FILE *fp;                                                                        //引入文件指针 
    int sel;  
    char ch; 
    int count=0; 
    Node *p,*r; 
    printf("\n\t\t\t\t学生成绩管理系统\n \n"); 
    l=(Node*)malloc(sizeof(Node)); 
    l->next=NULL; 
	r=l;   
    fp=fopen("C:\\student","wb"); 
    while(1){
    	menu();  
    printf("请你选择操作:"); 
    scanf("%d",&sel); 
      if(sel==0) 
       { 
         if(shoudsave==1) 
         {
           getchar(); 
           printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n) \n"); 
           scanf("%c",&ch); if(ch=='y'||ch=='Y') 
           Save(l); 
         } 
		system("cls");
		system("color 3f");
		printf("\n\t\t\t====================退出系统====================\n");
        printf("\n=====>提示:你已经退出系统,再见!\n"); 
        return 0; 
} 
switch(sel)                                                      //选择所要执行的操作 
{ 
case 1:
       system("cls");system("color 3f");Add(l);break;                                             
case 2:
       system("cls");system("color 3f");Del(l);break;                                               
case 3:
       system("cls");system("color 3f");Qur(l);break;                   // goto loop;                           
case 4:
       system("cls");system("color 3f");Modify(l);break;                                          
case 5:
       system("cls");system("color 3f");Disp(l);break;                                            
case 6:
       system("cls");system("color 3f");Tongji(l);break;                                            
case 7:
       system("cls");system("color 3f");Chinese(l);break;                                           
case 8:
       system("cls");system("color 3f");Maths(l);break;                                             
case 9:
       system("cls");system("color 3f");English(l);break;                                           
case 10:
       system("cls");system("color 3f");select(l);break;                                          
case 11:
       system("cls");system("color 3f");Save(l);break;                                             
case 12:
system("cls");system("color 3f");
printf("\n\t\t\t====================系统信息====================\n\n");
printf("  本程序由XX公司技术人员开发,经历了漫长的调试期和变态到无语的修bug期,终于在今天与广大用户见面\n本着方便用户的原则,我们在页面上下了很多功夫,希望在您的使用过程中,能达到您的满意\n以下是我们产品的一些信息:\n");
printf("\n\t\t程序开发者:秦飞阳  \t\t技术顾问:张志远 \n");
printf("\n\t\t页面菜单设计者:秦飞阳  \t所属公司:计算机科学与技术3班 \n");
printf("\n\t\t版本信息:V-step1.0  \t\t序列号:00001 \n");
printf("\n\t\t编译日期:2017.9.10  \t\t最近更新:2017.9.13\n");
printf("\n\t\t程序适用:学生信息的增加、修改、删除、保存,学生成绩的统计、显示\n");
printf("\n\t\t其他功能:按学生某项成绩将学生信息排序以及对学生信息的定区间摘取\n");
printf("\n=====>请选择其他操作(“0”退出系统):\n\n");break;  
default:  
        system("cls");system("color 3f");Wrong();getchar();break;

}
	}
return 0;
} 

这些代码完全是可以拿过来直接运行的,功能相对来说比较简单,但是对于一般学校的要求,及格是肯定够的,但是我还是想对大家说一句,不要抄,自己敲一遍代码也是好的,一定要懂每一步的意思。

如有不合适的地方,还请指正。

 

 

 

 

 

 

                   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章