C语言学生成绩管理系统

——————————————————————————————————————————————

(1) #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<ctype.h>
#define M 3
struct student
{long num;
char name[20];
char sex;
int score[5];
int ave;
}stu[M];
void init()
{
printf("\t\t********************************\n\n");
printf("\t\tStudent score management systerm \n");
printf("\n");
printf("\t\t Make by Maggiehe \n");
printf("\n");
printf("\t\t Student number is 3206***** \n\n");
printf("\t\t********************************\n\n");
}
void input()
{
int i,j;
printf("\nInput the student number name sex math English PE maolun majing:\n");
for(i=0;i<M;i++)
{scanf("%ld,%s,%c",&stu[i].num,stu[i].name,&stu[i].sex);
for(j=0;j<5;j++)
scanf("%d",&stu[i].score[j]);
scanf("%d",&stu[i].ave);
save();
}
}
void list()
{
int i,j;
clrscr();
printf("\t**********************student****************************\n");
printf("num name sex math English PE maolun majing:\n");
for(i=0;i<M;i++)
{
printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex);
for(j=0;j<5;j++)
printf("%d",stu[i].score[j]);
printf("%d",stu[i].ave);
}
if((i+1)%10==0)
{
printf("\npress any key continue.......\n");
getch();
}
printf("\t*************************end*********************************\n");
}
void average()
{
int i,j;
float sum[M];
for(i=0;i<M;i++)
for(j=0;j<5;j++)
sum[i]+=stu[i].score[j];
stu[i].ave=sum[i]/5.0;
}
void search_num()
{
long num;
int i,j;
printf("\nplease enter number which you want to search:");
scanf("%ld",&num);
printf("\n");
for(i=0;i<M;i++)
if(stu[i].num!=num)
printf("The number is not exist\n");
else
{ printf("number name sex math English PE maolun majing average\n");
printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex);
for(j=0;j<5;j++)
printf("%d",stu[i].score[j]);
printf("%d",stu[i].ave);
}
}
void search_nam()
{
int i,j;
char name[20];
printf("\nplease enter name which you want to search:");
scanf("%s",&name);
printf("\n");
for(i=0;i<M;i++)
if(strcmp(stu[i].name,name)==0)
{
printf("number name sex math English PE maolun majing average:\n");
printf("%ld%s%c",stu[i].num,stu[i].name,stu[i].sex);
for(j=0;j<5;j++)
printf("%d",stu[i].score[j]);
printf("%d",stu[i].ave);
}
else
printf("\nThe name is not exist!!!\n");
}
void search_ave()
{
int i,j,a=0;
float k;
printf("please enter average score which you want to search:");
scanf("%f",&k);
printf("\n");
for(i=0;i<M;i++)
if(stu[i].ave!=k)
printf("The average score is not exist!!!\n");
else
for(i=0;i<M;i++)
{
if(stu[i].ave<=k)
printf("number name sex math English PE maolun majing average\n");
printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex);
for(j=0;j<5;j++)
printf("%d",stu[i].score[j]);
printf("%d",stu[i].ave);
a++;
}
}
void sort()
{
int i,j;
struct student temp;
for(i=0;i<M;i++)
for(j=i+i;j<M;j++)
if(stu[i].ave<stu[j].ave)
{temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
void save()
{
int i;
FILE *fp;
if((fp=fopen("student.dat","wb"))==NULL)
{printf("cannot open file\n");
return;
}
for(i=0;i<M;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
void delect()
{
int i,t;
long num;
printf("please enter number which you want to delect:");
scanf("%ld",&num);
printf("\n");
for(i=0;i<M;i++)
{
if(stu[i].num!=num)
printf("The number is not exist!!!\n");
if(stu[i].num==num)
t=i;
}
for(i=t;i<M;i++)
stu[i]=stu[i+1];
save();
}
void insert()
{FILE *fp;
int i,n,t;
struct student s;
printf("please input record\n");
printf("number name sex math English PE maolun majing average\n"); scanf("%ld,%s,%c,%d%d%d%d%d%d",&s.num,s.name,&s.sex,&s.score[0],&s.score[1],&s.score[2],&s.score[3],&s.score[4],&s.ave);
s.ave=(s.score[0]+s.score[1]+s.score[2]+s.score[3]+s.score[4])/3.0;
if((fp=fopen("student.dat","wb"))==NULL)
{printf("cannot open file\n");
return;
}
i=M;
for(t=0;stu[i].ave>s.ave&&t<M;t++)
if(fwrite(&s,sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
void MainMenu()
{clrscr();
printf("\t********************************************************************\n
\n);
Printf(“\n”);
printf("\t choose one of following:\n");
printf("\t 1. search record\n");
printf("\t 2. sort record\n");
printf("\t 3. insert record\n");
printf("\t 4. delect record\n");
printf("\t please enter your choice:");
printf(“\n”); printf("\t********************************************************************\n");
}
void menu_select()
{clrscr();
printf("\t******************************************************************\n\n"); printf(“\n”);
printf("\t choose one of following:\n");
printf("\t 1.1 search by number\n");
printf("\t 1.2 search by name\n");
printf("\t 1.3 search by average score\n");
printf("\t please enter your choice:");
printf(“\n”); printf("\t******************************************************************\n");
}
void search()
{
char ch;
clrscr();
menu_select();
ch=getch();
switch(ch)
{
case '1':search_num();break;
case '2':search_nam();break;
case '3':search_ave();break;
}
}
main()
{
char ch;
clrscr();
init();
input();
list();
average();
save();
MainMenu();
ch=getch();
switch(ch)
{
case '1':search();break;
case '2':sort();break;
case '3':insert();break;
case '4':delect();break;
}
search_num();
search_nam();
search_ave();
sort();
delect();
insert;

}

——————————————————————————————————————————————————

(2) #include<stdlib.h>    
#include<stdio.h>    
struct   list{    
        int   num;    
        char   name[256];    
        int   china;    
        int   english;    
        int   math;    
        struct   list   *next;    
};    
typedef   struct   list   node;    
typedef   node   *link;    
printf_list(link   head)    
{    
      link   pointer;    
      pointer=head;    
      while(pointer!=NULL)    
      {    
        printf("number:%d\n",pointer->num);    
        printf("name:%s\n",pointer->name);    
        printf("china:%d\n",pointer->china);    
        printf("english:%d\n",pointer->english);    
        printf("math:%d\n",pointer->math);    
        pointer=pointer->next;    
      }    
      }    
link   creat_list(link   head)    
{    
        int   cnum;    
        char   cname[256];    
        int   cchina;    
        int   cenglish;    
        int   cmath;    
        link   pointer,new;    
        int   i;    
        head=(link)malloc(sizeof(node));    
        if(head==NULL)    
            {   printf("memory   allocate   failure!!\n");    
                exit(0);}    
        else{    
            printf("please   input   number:");    
            scanf("%d",&cnum);    
            printf("please   input   name:");    
            scanf("%s",&cname);    
            printf("please   input   china:");    
            scanf("%d",&cchina);    
            printf("please   input   english:");    
            scanf("%d",&cenglish);    
            printf("please   input   math:");    
            scanf("%d",&cmath);    
            head->num=cnum;    
            for(i=0;i<256;i++)    
            {    
            head->name[i]=cname[i];    
              }    
            head->china=cchina;    
            head->english=cenglish;    
            head->math=cmath;    
            head->next=NULL;    
            pointer=head;    
        while(1)    
        {    
            new=(link)malloc(sizeof(node));    
            if(new==NULL){    
              printf("memory   allocate   failure!!\n");    
              exit(0);}    
              printf("please   input   number:");    
              scanf("%d",&cnum);    
                if(cnum==0){    
break;         }    
              printf("please   input   name:");    
              scanf("%s",cname);    
              printf("please   input   china:");    
              scanf("%d",&cchina);    
              printf("please   input   english:");    
              scanf("%d",&cenglish);    
              printf("please   input   math:");    
              scanf("%d",&cmath);    
              new->num=cnum;    
              for(i=0;i<256;i++){    
              new->name[i]=cname[i];}    
              new->china=cchina;    
              new->english=cenglish;    
              new->math=cmath;    
              new->next=NULL;    
              pointer->next=new;    
              pointer=new;    
              }    
              }    
              return   head;    
}    
search_chengji(int   key1,link   head)    
{    
        link   pointer;    
        pointer=head;    
        while(pointer!=NULL)    
        {    
          if(pointer->num==key1)    
          {    
          printf("number:%d\n",pointer->num);    
          printf("name:%s\n",pointer->name);    
          printf("china:%d\n",pointer->china);    
          printf("english:%d\n",pointer->english);    
          printf("math:%d\n",pointer->math);    
          }    
          pointer=pointer->next;    
        }    
}    
link   modify_chengji(link   head,int   key3)    
{    
   
          link   pointer;    
          char   xname[256];    
          int   xchina;    
          int   xenglish;    
          int   xmath;    
          int   choose,i;    
          pointer=head;    
          printf("enter   0   exit   modefiy\n");    
          printf("enter   1   modefiy   name\n");    
          printf("enter   2   modefiy   china\n");    
          printf("enter   3   modefiy   english\n");    
          printf("enter   4   modefiy   math\n");    
          scanf("%d",&choose);    
          switch(choose)    
      {    
      case   1:    
          printf("please   input   name:");    
          scanf("%s",&xname);    
          break;    
      case   2:    
          printf("please   input   china:");    
          scanf("%d",&xchina);    
          break;    
      case   3:    
          printf("please   input   english:");    
          scanf("%d",&xenglish);    
          break;    
      case   4:    
          printf("please   input   math:");    
          scanf("%d",&xmath);    
          break;    
      }    
      while(1){    
          pointer=pointer->next;    
          if(pointer->num==key3)    
                {    
                if(choose==1)    
                {   for(i=0;i<256;i++)    
                {    
pointer->name[i]=xname[i];    
}    
break;    
}    
                else   if(choose==2)    
                {   pointer->china=xchina;    
                break;}    
                else   if(choose==3)    
                {   pointer->english=xenglish;    
              break;    
              }    
                else   if(choose==4)    
{pointer->math=xmath;    
      break;}    
                }    
                }    
          return   head;    
}    
link   delete_chengji(link   head,int   key2)    
          {    
          link   pointer;    
          link   back;    
          pointer=head;    
          while(1)    
          {    
          if(head->num==key2)    
        {   head=pointer->next;    
            free(pointer);    
            break;    
            }    
            back=pointer;    
            pointer=pointer->next;    
          if(pointer->num==key2)    
          {    
            back->next=pointer->next;    
            free(pointer);    
            break;}    
            }    
        return   head;    
}    
link   insert_chengji(link   head,link   new,int   key3)    
{    
          link   pointer;    
          pointer=head;    
          while(1)    
          {    
          if(pointer==NULL){    
          new->next=head;    
          head=new;    
          break;}    
          if(pointer->num==key3){    
          new->next=pointer->next;    
          pointer->next=new;    
          break;}    
          pointer=pointer->next;    
          }    
    return   head;    
          }    
pingjufen(link   head)    
{    
    link   pointer;    
    int   pchina,ppchina;    
    int   penglish,ppenglish;    
    int   pmath,ppmath;    
    int   count;    
    pchina=0;    
    penglish=0;    
    pmath=0;    
    count=0;    
    pointer=head;    
    while(1)    
    {    
      pchina=pchina+pointer->china;    
      penglish=penglish+pointer->english;    
      pmath=pmath+pointer->math;    
      count=++count;    
      if(pointer->next==NULL)    
      {    
      break;    
      }    
      pointer=pointer->next;    
}    
      ppchina=pchina/count;    
      ppenglish=penglish/count;    
      ppmath=pmath/count;    
    printf("china   ping   jun   fen:%d\n",ppchina);    
    printf("english   ping   jun   fen:%d\n",ppenglish);    
    printf("math   ping   jun   fen:%d\n",ppmath);    
}    
main()    
{    
    for(;;)    
    {    
    link   head;    
    link   new;    
    int   key;    
    int   keynum;    
    printf("0>exit   the   programm.\n");    
    printf("1>create   list.\n");    
    printf("2>search   chengji.\n");    
    printf("3>modify   chengji.\n");    
    printf("4>delete   chengji.\n");    
    printf("5>add   chengji.\n");    
    printf("6>pingjunfeng.\n");    
    printf("7>print   chengji.\n");    
    scanf("%d",&key);    
    switch(key){    
            case     0:    
            exit(0);    
            case   1:    
          head=creat_list(head);    
          if(head!=NULL)    
          {   printf_list(head);}    
            break;    
            case     2:    
            printf("please   input   0   Exit.\n");    
            printf("please   input   number   for   search:");    
            scanf("%d",&keynum);    
            if(keynum==0){    
break;             }    
            search_chengji(keynum,head);    
            break;    
            case     3:    
            printf("please   input   number   for   modify:");    
            scanf("%d",&keynum);    
          head=modify_chengji(head,keynum);    
            if(head!=NULL)    
              {    
                printf_list(head);    
                }    
            break;    
            case     4:    
            printf("please   input   0   exit\n");    
            printf("please   input   number   for   delete:");    
            scanf("%d",&keynum);    
              if(keynum==0){    
break;           }    
          head=delete_chengji(head,keynum);    
            break;    
            case     5:    
            if(head!=NULL){    
            new=(link)malloc(sizeof(node));    
            printf("please   input   number:");    
            scanf("%d",&new->num);    
            if(new->num==0){    
    break;}    
            printf("please   input   name:");    
            scanf("%s",&new->name);    
            printf("please   input   china:");    
            scanf("%d",&new->china);    
            printf("please   input   english:");    
            scanf("%d",&new->english);    
            printf("please   input   math:");    
            scanf("%d",&new->math);    
            printf("please   input   the   data   number   for   insert:");    
            scanf("%d",&keynum);    
            head=insert_chengji(head,new,keynum);    
            if(head!=NULL)   {    
              printf_list(head);}    
            }    
            break;    
            case   6:    
            pingjufen(head);    
            break;    
            case   7:    
            printf_list(head);    
            break;    
            }    
            }    
    }    

——————————————————————————————————————————————————

(3)#include <stdio.h>
#include <conio.h>

#define Back 8
#define Enter 13
#define Esc 27

#define home 71
#define end 79
#define upkey 72
#define dnkey 80
#define pgup 73
#define pgdn 81

struct person{
 char name[14];
 char tel[13];
 char eml[22];
 char dpmnt[22];
};
int savstate=1;

int barup(int y) /*光条上移*/ 
 {
 if(y>=8)
 {
 int i;struct{unsigned char ch;unsigned char attr;}t;
 for(i=4;i<=30;i++)
 { gettext(i,y,i,y,&t);t.attr=0x07;puttext(i,y,i,y,&t);}
 y=y-2;
 for(i=4;i<=30;i++)
 { gettext(i,y,i,y,&t);t.attr=0x70;puttext(i,y,i,y,&t);}
 }
 return y;
 }
 
int bardn(int y) /*光条下移*/
 {
 if(y<=18)
 {
 int i;struct{unsigned char ch;unsigned char attr;}t;
 for(i=4;i<=30;i++)
 { gettext(i,y,i,y,&t);t.attr=0x07;puttext(i,y,i,y,&t);}
 y=y+2;
 for(i=4;i<=30;i++)
 { gettext(i,y,i,y,&t);t.attr=0x70;puttext(i,y,i,y,&t);}
 }
 return y;
 }

int rtnstr(char ary[],int l,int m) /*对按键逐个测试,排除部分非法输入,按后退键修改,Enter键确认*/
 {
 int i,x,y; char ch; 
 for(i=0;i<=m;i++)
 { x=wherex();y=wherey();
 if(i<m) { ary[i]=getch(); 
 if(ary[i]==0) {getch(); i=i-1; continue;}
 }
 clreol();
 if(i==m) do{ ch=getch(); if(ch==0)getch(); if(ch==Esc)return 0;
 if(ch==Enter){ary[m]='\0'; return 1;} if(ch==Back)break;
 gotoxy(x+m-i,y) ;clreol(); cprintf(" # Can't be more than %d letters.",m);
 gotoxy(x,y);
 }while(1);
 if(ary[i]==Esc)return 0;
 if(ary[i]==Back&&i==0) {i=i-1;continue;}
 if(ary[i]==Enter)
 {
   if(i>=l){ary[i]='\0';return 1;}
   else{ gotoxy(x+m-i,y); clreol(); cprintf(" # Can't be less than %d letters.",l);
   gotoxy(x,y); i=i-1; continue;
   }
 }
 if(ary[i]==Back&&i>0||ch==Back) {gotoxy(x-1,y); clreol(); i=i-2; ch=0; continue;}
 if(m==3||(l==7&&m==12)){if(ary[i]<48||ary[i]>57){i=i-1;continue;}}
 putchar(ary[i]);
 }
 }

int readrecord(struct person psn[],int n) /*读文件。若不存在则新建并写入初始化后的数组,返回记录个数*/
 { int i,rcd=1; FILE *fp;
 if((fp=fopen("C:\\zhyx.c","rb"))==NULL)
 { rcd=0;if((fp=fopen("C:\\zhyx.c","wb"))==NULL)
 { printf(" Cannot open file!");
return n;
 }
 }
 if(rcd==0) for(i=0;i<100;i++)fwrite(&psn[i],sizeof(struct person),1,fp);
 else for(i=0;i<100;i++)
 { 
 fread(&psn[i],sizeof(struct person),1,fp);if(psn[i].name[0]=='\0')break;n++;
 }
 fclose(fp); printf(" There are %d records now.\n Records in C://zhyx.c",n); return n;
 }

int add(struct person psn[],int n) /*增加记录。任意位置按Esc键退出,返回记录总数,并于主菜单显示增加的个数*/
 { int i,cnt=1;int t=n;
 while(n<100)
 { clrscr();
 printf("\n\nAdded %d.\nPlease input the information,Esc back to menu:\n\n\n\n",n-t);
 printf("name:");
 cnt=rtnstr(psn[n].name,2,13);if(cnt==0)break;
 printf("\n\nphonenumber:");
 cnt=rtnstr(psn[n].tel,7,12);if(cnt==0)break;
 printf("\n\nemail:");
 cnt=rtnstr(psn[n].eml,7,21);if(cnt==0)break;
 printf("\n\ndepartment:");
 cnt=rtnstr(psn[n].dpmnt,2,21);if(cnt==0)break;
 printf("\n\nRecord added successfully!");
 n++;
 }if(n==100){
 printf("\n\nThe record number has reached 100,can't add any more!");getch();
  } 
 clrscr();if(cnt==0)psn[n]=psn[n+1];
 if(t!=n){savstate=0;if(n-t!=1) printf(" Added %d records.\n",n-t);else printf(" Added 1 record.\n");}
 return n;
 }

int delete(struct person psn[],int n) /* 删除一记录 。姓名重复则输入序号字符串再转化为整数,由于情况简单直接讨论*/ 
 {
int i,indx,num=0,cnt=1; char ch; char str[14];
  printf("\n\n\n\nDelete name:");
cnt=rtnstr(str,2,13);str[13]='\0'; if(cnt==0) {clrscr();return n;}
 printf("\n");
for(i=0;i<n;i++)if(strcmp(psn[i].name,str)==0)
   { num++; printf("\n%-2d %-14s %-15s %-23s %-22s",i,psn[i].name,psn[i].tel,psn[i].eml,psn[i].dpmnt);
   if(num==1)indx=i;
   }
  if(num==1){ printf("\n\nFind 1 recod. Delete it(Y/N)?:");
 do{ ch=getch();
 if(ch=='Y'||ch=='y'){ clrscr();printf(" Deleted a record! name: %s",str);
 for(i=indx;i<n;i++)psn[i]=psn[i+1];savstate=0;n--;return n;
 }
 else if(ch=='N'||ch=='n'){clrscr();return n;}
 }while(1);
 }
if(num>1){ printf("\n\nFind %d recods.Input the number before a record to delete it:\n\n",num);
 cnt=rtnstr(str,1,3);if(cnt==0){clrscr();return n;} 
 cnt=strlen(str);if(cnt==3) {clrscr();printf(" Index error!");return n;} /*借用cnt(continue)*/
 if(cnt==1)cnt=str[0]-48; /*续借,indx还要用到*/
 else if(cnt==2)cnt=(str[0]-48)*10+str[1]-48;
   if(cnt<n&&strcmp(psn[cnt].name,psn[indx].name)==0) 
 { clrscr();printf(" Deleted a record! name: %s",psn[indx].name);
 for(i=cnt;i<n;i++)psn[i]=psn[i+1];savstate=0;n--;return n;
 }
   else {clrscr(); printf(" Index error!"); return n;}
 }
 clrscr();
 printf(" The name %s do not exist!",str);
 return n;
 }

void order(struct person psn[],int n) /*排序。可按姓名或电话按升序排序,主菜单中显示排序情况*/
 { char ch;
 printf("\n\npress F to order by name,S by phonenumber.\n");
 do
 { ch=getch();
 if(ch==Esc)break;
 }while(ch!='f'&&ch!='F'&&ch!='s'&&ch!='S');
 if(ch=='f'||ch=='F')
 {
 int i,j,k; struct person temp;
 for(i=0;i<n-1;i++)
 {
 k=i;for(j=i+1;j<n;j++)if(strcmp(psn[j].name,psn[k].name)<0)k=j;
 if(k!=j){temp=psn[i];psn[i]=psn[k];psn[k]=temp;}
 }clrscr();
 printf("\n Ordered by name.");
 savstate=0;return;
 }
 if(ch=='s'||ch=='S')
 {
 int i,j,k; struct person temp;
 for(i=0;i<n-1;i++)
 {
 k=i;for(j=i+1;j<n;j++)if(strcmp(psn[j].tel,psn[k].tel)<0)k=j;
 if(k!=j){temp=psn[i];psn[i]=psn[k];psn[k]=temp;}
 }clrscr();
 printf("\n Ordered by phonenumber.");
 savstate=0;return;
 }
 clrscr();
 }

void modify(struct person psn[],int n) /*修改记录 。姓名重复输入序号字符串再转化为整数,由于情况简单直接讨论*/
 {
 int i,indx,num=0,cnt=1; char str[14]; struct person temp;
 printf("\nPlease input the friend's name:");
 cnt=rtnstr(str,2,13);str[13]='\0'; if(cnt==0) {clrscr();return;}
 printf("\n");
 for(i=0;i<n;i++)if(strcmp(psn[i].name,str)==0)
   { num++; printf("\n%-2d %-14s %-15s %-23s %-22s",i,psn[i].name,psn[i].tel,psn[i].eml,psn[i].dpmnt);
   if(num==1)indx=i;
   }
  if(num==1)
   {
 temp=psn[indx]; 
 printf("\n\nPlease input new information,Esc back to menu:\n\n");
 printf("name:");
 cnt=rtnstr(psn[indx].name,2,13);if(cnt==0){psn[indx]=temp;clrscr();return;}
  printf("\n\nphonenumber:");
 cnt=rtnstr(psn[indx].tel,7,12);if(cnt==0){psn[indx]=temp;clrscr();return;}
 printf("\n\nemail:");
 cnt=rtnstr(psn[indx].eml,7,21);if(cnt==0){psn[indx]=temp;clrscr();return;}
 printf("\n\ndepartment:");
 cnt=rtnstr(psn[indx].dpmnt,2,21);if(cnt==0){psn[indx]=temp;clrscr();return;}
 }
  if(num>1){ printf("\n\nFind %d recods.Input the number before a record to modify it:\n\n",num);
   cnt=rtnstr(str,1,3);if(cnt==0){clrscr();return;} 
 cnt=strlen(str);if(cnt==3) {clrscr();printf(" Index error!");return;} /*借用cnt*/
 temp=psn[indx]; if(cnt==1)indx=str[0]-48;
 if(cnt==2)indx=(str[0]-48)*10+str[1]-48;
   if(indx<n&&strcmp(temp.name,psn[indx].name)==0)
 {
     temp=psn[indx]; 
 printf("\n\nPlease input new information,Esc back to menu:\n\n");
 printf("name:");
 cnt=rtnstr(psn[indx].name,2,13);if(cnt==0){psn[indx]=temp;clrscr();return;}
 printf("\n\nphonenumber:");
 cnt=rtnstr(psn[indx].tel,7,12);if(cnt==0){psn[indx]=temp;clrscr();return;}
 printf("\n\nemail:");
 cnt=rtnstr(psn[indx].eml,7,21);if(cnt==0){psn[indx]=temp;clrscr();return;}
 printf("\n\ndepartment:");
 cnt=rtnstr(psn[indx].dpmnt,2,21);if(cnt==0){psn[indx]=temp;clrscr();return;}
 }
 else {clrscr(); printf(" Index error!"); return;}
 }
 clrscr();
 if(num>0){printf(" Modified a record! name:%s->%s",temp.name,psn[indx].name);savstate=0;n--;}
 else printf(" The name %s do not exist!",str);
 }

void print(struct person psn[],int n) /*显示所有记录。由pgup、pgdn、home、end及上下键控制*/
 {
 int i,k=0,l=0,j=n/10+(n%10?1:0); char ch;
 do
 {
 printf("\n name:: phonenumber:: email:: department::\n\n");
 for(i=k*10+l;i<(k+1)*10+l;i++)
 { if(i==n)break;
 printf(" %-14s %-15s %-23s %-22s\n\n",psn[i].name,psn[i].tel,psn[i].eml,psn[i].dpmnt);
 }
 if(l%10==0) {gotoxy(1,24);cprintf(" Press Esc back to menu. page %d / %d ",k+l/10+1,j);}
 else {gotoxy(1,24);cprintf(" Press Esc back to menu. (%d pages)",j);} 
 do
 { ch=getch();
 if(ch==0)
 { ch=getch();
 if(ch==pgdn&&((k+1)*10+l<n))k++;
 if(ch==pgup&&(k*10+l>=10))k--;else if(ch==pgup)ch=home;
 if(ch==home){k=0;l=0;}
 if(ch==end){k=j-1;l=0;}
 if(ch==upkey&&(k*10+l>0))l--;
 if(ch==dnkey&&(k*10+l<n-1))l++;
 break;
 }
 }while(ch!=Esc);
 if(ch==Esc) break;clrscr();
 }while(1);clrscr();
 }

void find(struct person psn[],int n) /*查找记录。直接输入姓名或电话,则显示匹配内容,姓名为纯数字者不显示*/
 {
 int i,num=0,cnt=1; char str[15];
 printf("\n\n\n Please input the name or phonenumber you want to find:\n\n");
 printf(" name or phone:");
 cnt=rtnstr(str,2,14);str[14]='\0'; if(cnt==0)return;
 for(i=0;str[i]!='\0';i++)
 if(str[i]<48||str[i]>57)
   {
   for(i=0;i<n;i++)
   if(strcmp(psn[i].name,str)==0)
   { num++;
     if(num==1)printf("\n\n name:: phonenumber:: email:: department::\n\n");
     printf(" %-14s %-15s %-23s %-22s\n\n",psn[i].name,psn[i].tel,psn[i].eml,psn[i].dpmnt);
   }
   if(num==0) {clrscr();printf("Can't find any record in accordance with %s!",str);return;}
   gotoxy(2,24); cprintf("Press any key to cotinue.");
   getch(); clrscr(); return;
    }
 for(i=0;i<n;i++)
   if(strcmp(psn[i].tel,str)==0)
   { num++;
     if(num==1)printf("\n\n name:: phonenumber:: email:: department::\n\n");
     printf(" %-14s %-15s %-23s %-22s\n\n",psn[i].name,psn[i].tel,psn[i].eml,psn[i].dpmnt);
    }
   if(num==0) {clrscr();printf("Can't find any record in accordance with %s!",str);return;}
   gotoxy(2,24); cprintf("Press any key to cotinue.");
   getch(); clrscr(); return;
 }


void save(struct person psn[],int n) /*保存记录。若磁盘故障或已满则退出*/
 { FILE *fp; int i;
 if(savstate==1)return;
 if((fp=fopen("C:\\zhyx.c","wb"))==NULL)
 {
 printf(" Cannot open file!");return;
 }
 for(i=0;i<=n;i++) if(fwrite(&psn[i],sizeof(struct person),1,fp)!=1) /*多保存了一项,但没必要*/
 {printf(" File error!");fclose(fp);return;}
 savstate=1;printf(" Records saved!");
 fclose(fp);
 }
main() /*主函数。有两重循环,第一重打印菜单,第二重处理按键*/
{
 int i,n=0,ex=0,y=8; char ch;
 struct person psn[100];
 for(i=0;i<100;i++)
 { strcpy(psn[i].name,"\0");
 strcpy(psn[i].tel,"\0");
 strcpy(psn[i].eml,"\0");
 strcpy(psn[i].dpmnt,"\0");
 }
 n=readrecord(psn,n);
 do
 {
 gotoxy(2,4); cprintf("#################################");
 gotoxy(2,5); cprintf("# #");
 gotoxy(2,6); cprintf("# A: add new records. #");
 gotoxy(2,7); cprintf("# #");
 gotoxy(2,8); cprintf("# D: delete certain records. #");
 gotoxy(2,9); cprintf("# #");
 gotoxy(2,10);cprintf("# O: order them. #");
 gotoxy(2,11);cprintf("# #");
 gotoxy(2,12);cprintf("# M: modify a record. #");
 gotoxy(2,13);cprintf("# #");
 gotoxy(2,14);cprintf("# P: print all. #");
 gotoxy(2,15);cprintf("# #");
 gotoxy(2,16);cprintf("# F: find certaen records. #");
 gotoxy(2,17);cprintf("# #");
 gotoxy(2,18);cprintf("# S: save. #");
 gotoxy(2,19);cprintf("# #");
 gotoxy(2,20);cprintf("# Esc: exit. #");
 gotoxy(2,21);cprintf("# #");
 gotoxy(2,22);cprintf("#################################");
 y=8;y=barup(y);
 gotoxy(2,24);cprintf("Please choose a menu form the table above.");
 do
 { ch=getch();
 if(ch==0) /*若按部分非字符键,可能是移动光条,y值跟踪光条改变*/
 {
 ch=getch();
 switch(ch)
 {
 case upkey:
 y=barup(y);ch=0;break;
 case dnkey:
 y=bardn(y);ch=0;
 }
 }
 if(ch==Enter)
 {
 switch(y) /*光条对应y值,y值对应字符*/
 {
 case 6: ch='a';break;
 case 8: ch='d';break;
 case 10: ch='o';break;
 case 12: ch='m';break;
 case 14: ch='p';break;
 case 16: ch='f';break;
 case 18: ch='s';break;
 case 20: ch=Esc;break;
 }
 }
 switch(ch) /*对不同字符调用相应函数或其它操作*/
 { case 'a':
 case 'A':
 { clrscr(); n=add(psn,n);
 ch=Enter; break;
 }
 case 'd':
 case 'D':
 { clrscr(); n=delete(psn,n);
 ch=Enter; break;
 }
 case 'o':
 case 'O':
 { clrscr(); order(psn,n);
 ch=Enter; break;
 }
 case 'm':
 case 'M':
 { clrscr(); modify(psn,n);
 ch=Enter; break;
 }
 case 'p':
 case 'P':
 { clrscr(); print(psn,n);
 ch=Enter; break;
 }
 case 'f':
 case 'F':
 { clrscr(); find(psn,n);
 ch=Enter; break;
 }
 case 's':
 case 'S':
 { clrscr(); save(psn,n);
 ch=Enter; break;
 }
 case Esc: /*退出时的处理。按Y保存后退出,N直接退出,Esc返回程序*/
 { clrscr();ex=1;
 if(savstate==0)
{ gotoxy(5,5); cprintf("Records not saved! save(y/n)? Cancel: Esc");
 do{ ch=getch();
 if(ch=='n'||ch=='N')savstate=1;
 if(ch=='y'||ch=='Y')save(psn,n);
 if(ch==Esc){ex=0;break;}
 }while(savstate!=1);
}
 clrscr(); ch=Enter; break;
 }
 }
 }while(ch!=Enter);
 if(ex==1)break;
 }while(1);
 clrscr();

——————————————————————————————————————————————————

(4)

#include<stdio.h>
#include<string.h>
#include<dos.h>
#include<conio.h>
#define M 7
struct student
{char num[4];
char name[8];
char xing[2];
float score[6];
}
student[M]={
{"1","小猫","男",87,89,85,96,85},
{"2","小狗","男",85,75,86,90,60},
{"3","小鸡","男",76,86,81,75,75},
{"4","小鸭","女",65,86,78,89,74},
{"5","小鹅","男",56,62,86,75,70},
{"6","小猪","女",85,84,75,76,90},
{"7","小马","女",76,79,78,80,81},
};
 char a[][10]={"学号","姓名","性别","C语言","英语","数学","电子","道德"};
 main()
 {
 void f11();
 void f12();
 void f13();
 void f4();
 void f5();
 void f21();
 void f22();
 void menu();
 menu();
 }
 void menu()
 {
 char choice,pm1,pm2;int i,j;
 loop:clrscr();
 {textcolor(11);
 printf("\n\n\n\t ***我班成绩管理系统***  \n");
 printf("\t     ============================================\n");
 printf("\t\t\t       1.统计;          2.排序;          \n");
 printf("\t\t\t        3.查询;          0.退出;          \n");
 printf("\t\t\t ===============================================\n");
 printf("       请你在上述功能中选择(0--3):\n");}
 do
 {
 choice=getchar();
 switch(choice)
 {
 case'1':loop1:clrscr();
 printf("\n\n\t==========****         统        计        ****==========\n");
 printf("\t  1.每门课程全班的总成绩和平均成绩;      \n");
 printf("\t  2.每个学生全部课程的总成绩和平均成绩;  \n");
 printf("\t  3.优秀三好学生的人数;                  \n");
 printf("\t  0.返回上一层菜单;                      \n");
 printf("\t  =====================================  \n");
 printf("   请你在上述功能中选择(0--3):\n");
 scanf("%s",&pm1);
 if(pm1=='1'){f11();f5();goto loop1;}
 else if(pm1=='2'){f12();f5();goto loop1;}
 else if(pm1=='3'){f13();f5();goto loop1;}
 else if(pm1=='0')goto loop;
 case'2':loop2:clrscr();
 printf("\n\n\n\t=======排    名     表=======\n");
 printf("\t  1.单科成绩排名;          \n");
 printf("\t  2.总成绩排名;            \n");
 printf("\t  0.返回上一层菜单;        \n");
 printf("\t===================================\n");
 printf("    请选择功能菜单(0--3):\n");
 scanf("%s",&pm2);
 if(pm2=='1'){f21();goto loop2;}
 else if(pm2=='2'){f22();goto loop2;}
 else if(pm2=='3'){f22();goto loop2;}
 else if(pm2=='0')goto loop;
  case'3':f4();goto loop;
   case'0':
   exit(0);
 }
 }
while(1);
}
    /*每门课程全班的总成绩和平均成绩*/
void f11()
{
int i,j;float sum1[5];
clrscr();
printf("\n\n\n\t======每门课程全班的总成绩和平均成绩======\n\n");
for(j=0;j<5;j++)
for(i=0,sum1[j]=0;i<M;i++)
sum1[j]+=student[i].score[j];
for(i=0,j=3;i<5;i++,j++)
printf("\t\t%s  总成绩:%8.2f;\t平均成绩:%5.2f\n",a[j],sum1[i],sum1[i]/M);
printf("\n\t\=================================================================\n");
}
    /*****每个学生全部课程的总成绩和平均成绩*****/
void f12()
{
int i,j;
printf("\n\n\n\t\t=====学生的总成绩和平均成绩=====\n\n");
for(j=0;j<M;j++)
for(i=0,student[j].score[5]=0;i<5;i++)
student[j].score[5]+=student[j].score[i];
for(i=0;i<M;i++)
printf("\t\t%s  的总成绩:     %8.2f;\t    平均成绩:\t%5.2f\n",
student[i].name,student[i].score[5],student[i].score[5]/M);
}
    /*****优秀三好学生人数*****/
void f13()
{
int i,j;
for(j=0;j<M;j++)
for(i=0,student[j].score[5]=0;i<5;i++)
student[j].score[5]+=student[j].score[i];
printf("\n\n\n\t\t=======优秀三好学生========\n\n\t");
for(i=0;i<8;i++)
printf("%s\t",a[i]);
for(i=0,j=0;i<M;i++)
if(student[i].score[5]/5>85&&student[i].score[0]>80&&student[i].score[1]>80&&
student[i].score[2]>80&&student[i].score[3]>80&&student[i].score[4]>80)
{
printf("\n\t%s\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f",
student[i].num,student[i].name,student[i].xing,student[i].score[0],student[i].score[1],
student[i].score[2],student[i].score[3],student[i].score[4]);
j++;
}
printf("\n\t总人数为:%2d人\n",j);
}
     /******单科成绩排名******/
void f21()
{
int i,n,j;struct student k;char am1;
loop1:clrscr();
printf("\n\n\n\t======    单科成绩排名     ================\n");
printf("\t  1.C语言;     2.英语;    3.数学;             \n\n");
printf("\t  4.电子;      5.道德;    0.返回上一层菜单    \n\n");
printf("\t================================================\n");
printf("    请选择需要查询的科目:                         \n");
scanf("%s",&am1);
if(am1=='0')goto end;
else if(am1=='1')j=0;
else if(am1=='2')j=1;
else if(am1=='3')j=2;
else if(am1=='4')j=3;
else if(am1=='5')j=4;
clrscr();
printf("\n\n\n\t======== 排   名    表  ==========\n\n",a[j+3]);
printf("%12s\t%s\t%\s\t排名\n",a[0],a[1],a[j+3]);
for(n=M;n!=1;n--)
for(i=0;i<n-1;i++)
if(student[i].score[j]<student[i+1].score[j])
{
k=student[i];
student[i]=student[i+1];
student[i+1]=k;
}
for(i=0;i<M;i++)
printf("%10s\t%s\t%5.2f\t%d\n",student[i].num,student[i].name,student[i].score[j],i+1);

f5();
goto loop1;
end:;
}
 /******总成绩排名******/
void f22()
{
int i,j,n;struct student k1;char am2;
for(j=0;j<M;j++)
for(i=0,student[j].score[5]=0;i<5;i++)
student[j].score[5]+=student[j].score[i];
for(n=M;n!=1;n--)
for(j=0;j<n-1;j++)
if(student[j].score[5]<student[j+1].score[5])
{
k1=student[j];
student[j]=student[j+1];
student[j+1]=k1;
}
loop2:
clrscr();
printf("\n\n\n\t=======总   成    绩    排    名    表=========\n");
printf("\t   1.全班总分排名;    2.男生总分排名; \n\n");
printf("\t   3.女生总分排名;    0.返回上一层菜单.\n");
printf("==========================================\n");
printf("   请在上述功能菜单中选择(0--3:");
scanf("%s",&am2);
if(am2=='1')
{
clrscr();
printf("\n\n\n\t========全班总成绩排名表=========\n\n");
printf("\t%s\t%s\t%s\t 总成绩\t 排名\n",a[0],a[1],a[2]);
for(j=0;j<M;j++)
printf("\t%s\t%s\t%s\t%8.2f\t%d\n",student[j].num,student[j].name,student[j].xing,student[j].score[5],j+1);f5();
goto loop2;
}
else if(am2=='2')
{
clrscr();
printf("\n\n\n\t======男生总成绩排名表=======\n\n");
printf(" \t%s\t%s\t     总成绩\t    排名\n",a[0],a[1],a[2]);
for(i=0,j=1;i<M;i++)
if(strcmp(student[i].xing,"男")==0)
printf(" \t%s\t%s\t 男\t%8.2f\t%d\n",student[i].num,student[i].name,student[i].score[5],j++);f5();
goto loop2;
}
else if(am2=='3')
{
clrscr();
printf("\n\n\t=====女生总成绩排名表=======\n\n");
printf(" \t%s\t%s\t%s\t  总成绩\t 排名\n",a[0],a[1],a[2]);
for(i=0,j=1;i<M;i++)
if(strcmp(student[i].xing,"女")==0)
printf("\t%s\t%s\t 女\t%8.2f\t%d\n",student[i].num,student[i].name,student[i].score[5],j++);f5();
goto loop2;
}
else if(am2=='0');
}
       /******查询******/
void f4()
{
int i,j;char ch[8];
loop4:
clrscr();
printf("\n\n\n\t=========查询===========\n\n");
printf("\t   请输入需要查询的姓名或学号(按0返回):");
scanf("%s",&ch);
for(i=0;i<M;i++)
if(strcmp(student[i].num,ch)==0||strcmp(student[i].name,ch)==0)
{
for(j=0;j<8;j++)
printf("%s\t",a[j]);
printf("\n%s\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",student[i].num,student[i].name,student[i].xing,student[i].score[4]);
f5();
goto loop4;
}
}
    /******提示******/
void f5()
{
printf("\n按任意键继续查询:");
getch();
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值