源程序.docx
《源程序.docx》由会员分享,可在线阅读,更多相关《源程序.docx(15页珍藏版)》请在冰豆网上搜索。
源程序
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#define HEADER1" --------------------------STUDENT-----------------------------\n"
#define HEADER2" | number | name |Comp|Math|Eng | sum | ave |mici|\n"
#define HEADER3" |----------|---------------|----|----|----|------|------|----|\n"
#define FORMAT " |%-10s|%-15s|%4d|%4d|%4d|%6d|%6.2f|%4d|\n"
#define DATA p->data.num,p->data.name,p->data.cgrade,p->data.mgrade,p->data.egrade,p->data.total,p->data.ave,p->data.mingci
#define END "--------------------------------------------------------------\n"
int flag=0;
typedef struct student
{
char num[10];
char name[15];
int cgrade;
int mgrade;
int egrade;
int total;
float ave;
int mingci;
};
typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;
void menu();
void printfdata(Node *pp);
void printheader();
void Nofind();
Node *Locate(Link l,char findmess[],char nameornum[]);
void stringinput(char *t,int lens,char *notice);
int numberinput(char *notice);
void Add(Link l);
void Qur(Link l);
void Modify(Link l);
void Tongji(Link l);
void Sort(Link l);
void Save(Link l);
void Wrong();
void Disp(Link l);
void Del(Link l);
void Insert(Link l);
/***************************************************/
void main()
{
Link l;
FILE *fp;
int select;
char ch;
int count=0;
int flag=0;
Node *p,*r;
l=(Node*)malloc(sizeof(Node));
if(!
l)
{
printf("\n allocate memory faliue ");
return;
}
l->next=NULL;
r=l;
fp=fopen("C:
\\student","ab+");
if(fp==NULL)
{
printf("\n=====>can not open file!
\n ");
exit(0);
}
while(!
feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(!
p)
{
printf("memory malloc failure!
\n");
exit(0);
}
if(fread(p,sizeof(Node),1,fp)==1)
{
p->next=NULL;
r->next=p;
r=p;
count++;
}
}
fclose(fp);
printf("\n=====>open file sucess,the total records number is:
%d.\n",count);
menu();
while(l)
{
system("cls");
menu();
p=r;
printf("\n Please Enter your choice(0-9):
") ;
scanf("%d",&select);
if(select==0)
{if(flag==1)
{getchar();printf("\n=====>Whether save the modified record to file?
(y/n):
");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("=====>thank you for useness!
");
getchar();
break;
}
switch(select)
{
case 1:
Add(l);break;
case 2:
Del(l);break;
case 3:
Qur(l);break;
case 4:
Modify(l);break;
case 5:
Insert(l);break;
case 6:
Tongji(l);break;
case 7:
Sort(l);break;
case 8:
Save(l);break;
case 9:
system("cls");Disp(l);break;
default:
Wrong();getchar();break;
}
}
}
/***************************************************/
void menu()
{
system("cls");
textcolor(10);
gotoxy(10,5);
cprintf(" The Students' Grade Management System \n");
gotoxy(10,8);
cprintf(" **************************Menu*************************\n");
gotoxy(10,9);
cprintf(" * 1 input record 2 delect record *\n");
gotoxy(10,10);
cprintf(" * 3 search record 4 modify record *\n");
gotoxy(10,11);
cprintf(" * 5 insert record 6 count record *\n");
gotoxy(10,12);
cprintf(" * 7 sort record 8 save record *\n");
gotoxy(10,13);
cprintf(" * 9 display record 0 quit system *\n");
gotoxy(10,14);
cprintf(" ********************************************************\n");
}
/***************************************************/
void printfdata(Node *pp)
{
Node* p;
p=pp;
printf(FORMAT,DATA);
}
/***************************************************/
void Wrong()
{
printf("\n\n\n\n\n***********Eroor:
input has wrong!
press any key to continue**********\n");
getchar();
}
/***************************************************/
void Nofind()
{
printf("\n=====>Not find this student!
\n");
}
/****************************************************/
void Disp(Link l)
{
Node *p;
p=l->next;
if(!
p)
{
printf("\n=====>Not studebt record!
\n");
getchar();
return;
}
printf("\n\n");
printheader();
while(p)
{
printfdata(p);
p=p->next;
printf(HEADER3);
}
getchar();
}
/**************************************************
**************************************************/
void printheader()
{ printf(HEADER1);fflush(stdin);
printf(HEADER2);fflush(stdin);
printf(HEADER3);fflush(stdin);
}
/****************************************************/
Node* Locate(Link l,char findmess[],char nameornum[])
{
Node *r;
if(strcmp(nameornum,"num")==0)
{
r=l->next;
while(r)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0)
{
r=l->next;
while(r)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}
/***************************************************/
void stringinput(char *t,int lens,char *notice)
{
char n[255];
do
{
printf(notice);
scanf("%s",n);
if(strlen(n)>lens)
printf("\n excced the required length!
\n");
}
while(strlen(n)>lens);
strcpy(t,n);
}
/***************************************************/
int numberinput(char *notice)
{
int t=0;
do{
printf(notice);
scanf("%d",&t);
if(t>100||t<0)
printf("\n score must in [0,100]!
\n");
}
while(t>100||t<0);
return t;
}
/***************************************************/
void Add(Link l)
{
Node *p,*r,*s;
char ch,flag=0,num[10];
r=l;
s=l->next;
system("cls");
Disp(l);
while(r->next!
=NULL)
r=r->next;
while(l)
{
while(l)
{
stringinput(num,10,"input number(press'0'return menu):
");
flag=0;
if(strcmp(num,"0")==0)
{return;}
s=l->next;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
flag=1;
break;
}
s=s->next;
}
if(flag==1)
{getchar();
printf("=====>The number %s is not existing,try again?
(y/n):
",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
continue;
else
return;
}
else
{break;}
}
p=(Node *) malloc(sizeof(Node));
if(!
p)
{
printf("\n allocate memory falure ");
return;
}
strcpy(p->data.num,num);
stringinput(p->data.name,15,"Name:
");
p->data.cgrade=numberinput("C language Score[0-100]:
");
p->data.mgrade=numberinput("Math Score[0-100]:
");
p->data.egrade=numberinput("English Score[0-100]:
");
p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=(float)(p->data.total/3);
p->data.mingci=0;
p->next=NULL;
r->next=p;
r=p;
flag=1;
}
return;
}
/***************************************************/
void Qur(Link l)
{
int select;
char searchinput[20];
Node *p;
if(!
l->next)
{
system("cls");
printf("\n=====>No student record!
\n");
getchar();
return;
}
system("cls");
printf("\n =====>1 Search by number =====>2 Search by name\n ");
printf(" please choice[1,2]:
");
scanf("%d",&select);
if(select==1)
{
stringinput(searchinput,10,"input the existing student number:
");
p=Locate(l,searchinput, "num");
if(p)
{
printheader();
printfdata(p);
printf(END);
printf("press any key to return");
getchar();
}
else
Nofind();
getchar();
}
else if(select==2)
{
stringinput(searchinput,15,"input the existing student name:
");
p=Locate(l,searchinput, "name");
if(p)
{
printheader();
printfdata(p);
printf(END);
printf("press any key to return");
getchar();
}
else
Nofind();
getchar();
}
else
Wrong();
getchar();
}
/***********************************************/
void Del(Link l)
{
int sel;
Node *p,*r;
char findmess[20];
if(!
l->next)
{ system("cls");
printf("\n=====>No student record!
\n");
getchar();
return;
}
system("cls");
Disp(l);
printf("\n =====>1 Delete by number =====>2 Delete by name\n ");
printf(" please choice[1,2]:
");
scanf("%d",&sel);
if(sel==1)
{
stringinput(findmess,10,"input the existing student number:
");
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!
=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>delete success!
\n");
getchar();
flag=1;
}
else
Nofind();
getchar();
}
else if(sel==2)
{
stringinput(findmess,15,"input the existing student name");
p=Locate(l, findmess,"name");
if(p)
{
r=l;
while(r->next!
=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n==========>delete success!
\n");
getchar();
flag=1;
}
else
Nofind();
getchar();
}
else
Wrong();
getchar();
}
/****************************************************/
void Modify(Link l)
{
Node *p;
char findmess[20];
if(!
l->next)
{ system("cls");
printf("\n==========>No student record!
\n");
getchar();
return;
}
system("cls");
printf("modify student recorder");
Disp(l);
stringinput(findmess,10," the existing student number:
");
p=Locate(l,findmess,"num");
if(p)
{
printf("Number:
%s,\n",p->data.num);
printf("Name:
%s,",p->data.name);
stringinput(p->data.name,15,"input new name:
");
printf("C language score:
%d,",p->data.cgrade);
p->data.cgrade=numberinput("C language Score[0-100]:
");
printf("Math score:
%d,",p->data.mgrade);
p->data.mgrade=numberinput("Math Score[0-100]:
");
printf("English score:
%d,",p->data.egrade);
p->data.egrade=numberinput("English Score[0-100]:
");
p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=(float)(p->data.total/3);
p->data.mingci=0;
printf("\n=====\n");
Disp(l);
flag=1;
}
else
Nofind();
getchar();
}
/*************************************************/
void Insert(Link l)
{
Link p,v,newinfo;
char ch,num[10],s[10];
int flag=0;
v=l->next;
system("cls");
Disp(l);
while
(1)
{ stringinput(s,10,"please input insert location after the Number:
");
flag=0;v=l->next;
while(v)
{
if(strcmp(v->data.num,s)==0) {flag=1;break;}
v=v->next;
}
if(flag==1)
break;
else
{ getchar();
printf("\n========>Th