资源描述
VC++综合试验 图书馆管理系统.txt都是一种山旳狐狸,你跟我讲什么聊斋,站在离你近来旳地方,眺望你对他人旳微笑,虽然心是百般旳疼痛 只为把你旳一举一动尽收眼底.耀眼旳白色,让我明白什么是纯粹旳伤害。#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LENGTH 20
#define SUBJECT 10
char subcall[SUBJECT][LENGTH];
int num_of_stu=0;
int num_of_sub=0;
struct data
{
char name[LENGTH];
char num[LENGTH];
float score[SUBJECT];
float sum;
float aver;
struct data *next;
};
void Menu(void);
struct data *Append(struct data*);
void Check(struct data*);
void Modify(struct data*);
void List(struct data*);
void Search(struct data*);
struct data *Delete(struct data*);
struct data *Sort1(struct data*,int (*g)(float,float));
void Sort2(struct data*,int (*g)(float,float));
int descend(float,float);
int ascend(float,float);
void main()
{
Menu();
}
void Menu(void)
{
char *choice[9]={"1.Append record","2.Check record","3.Modify record","4.List record","5.Search record","6.Delete record","7.Sort score in descending order","8.Sort score in ascending order","0.exit"};
struct data *head=NULL;
char reply,c;
int n=0,k,i;
for(i=0;i<9;i++)
{
k=strlen(choice[i]);
n=(n>k)?n:k;
}
while(1)
{
system("cls");
printf("\t\tWelcome to the Students' Score Management System\n");
printf("\t\t\t-----------------------------------\n");
for(i=0;i<9;i++)
{
printf("\t\t\t| %s",choice[i]);
k=strlen(choice[i]);
for(;n-k>0;k++)
putchar(' ');
printf("|\n");
}
printf("\t\t\t-----------------------------------\n");
while(1)
{
printf("Please input your choice:");
reply=getchar();
if(reply=='\n')
continue;
else
c=getchar();
if(reply>='0'&&reply<='8'&&c=='\n')
break;
else if(c!='\n')
while(c=getchar()!='\n');
printf("There is no such choice!\n");
}
if(reply>'1'&&head==NULL)
printf("There is no data stored!\n");
else
{
switch(reply)
{
case'1':head=Append(head);break;
case'2':Check(head);break;
case'3':Modify(head);break;
case'4':List(head);break;
case'5':Search(head);break;
case'6':head=Delete(head);break;
case'7':Sort2(head,descend);break;
case'8':Sort2(head,ascend);break;
default:while(1)
{
printf("Do you really want to exit(Y/N or y/n)?");
reply=getchar();
if(reply=='\n')
continue;
else
c=getchar();
if((reply=='Y'||reply=='N'||reply=='y'||reply=='n')&&c=='\n')
break;
else if(c!='\n')
while(c=getchar()!='\n');
}
if(reply=='Y'||reply=='y')
{
free(head);
return;
}
}
}
while(1)
{
printf("Press ENTER to continue:");
scanf("%c",&reply);
if(reply=='\n')
break;
else
while(c=getchar()!='\n');
}
}
}
struct data *Append(struct data *head)
{
struct data *p;
char reply,c;
int i;
system("cls");
if(head==NULL)
{
p=head=(struct data*)malloc(sizeof(struct data));
printf("How many subjects do you want to record(n<=%d)?",SUBJECT);
scanf("%d%*c",&num_of_sub);
for(i=0;i<num_of_sub;i++)
{
printf("Please input subject%d's name:",i+1);
scanf("%s%*c",subcall[i]);
}
}
else
{
for(p=head;p->next!=NULL;p=p->next);
p->next=(struct data*)malloc(sizeof(struct data));
p=p->next;
}
loop:printf("Please input the student's name:");
scanf("%s%*c",p->name);
printf("Please input the student's number:");
scanf("%s%*c",p->num);
p->sum=0;
for(i=0;i<num_of_sub;i++)
{
printf("Please input the student's %s score:",subcall[i]);
scanf("%f%*c",&p->score[i]);
p->sum+=p->score[i];
}
p->aver=p->sum/num_of_sub;
num_of_stu++;
while(1)
{
printf("Do you want to go on appending(Y/N or y/n)?");
reply=getchar();
if(reply=='\n')
continue;
else
c=getchar();
if((reply=='Y'||reply=='N'||reply=='y'||reply=='n')&&c=='\n')
break;
else if(c!='\n')
while(c=getchar()!='\n');
}
if(reply=='Y'||reply=='y')
{
p->next=(struct data*)malloc(sizeof(struct data));
p=p->next;
goto loop;
}
else
{
p->next=NULL;
return head;
}
}
void Check(struct data *head)
{
struct data *p,*q;
struct data **t=(struct data**)malloc(num_of_stu/2*sizeof(struct data*));
int minlim,maxlim,n=0,i;
system("cls");
for(p=head;p!=NULL;p=p->next)
{
for(i=0;i<n;i++)
{
if(strcmp(p->name,(*(t+i))->name)==0)
break;
}
if(i<n)
continue;
for(q=p->next;q!=NULL;q=q->next)
{
if(strcmp(p->name,q->name)==0)
{
printf("Name %s has been inputed repeatedly!\n",p->name);
*(t+n)=p;
n++;
break;
}
}
}
printf("Altogether %d name has been repeatedly inputed.\n",n);
n=0;
for(p=head;p!=NULL;p=p->next)
{
for(i=0;i<n;i++)
{
if(strcmp(p->num,(*(t+i))->num)==0)
break;
}
if(i<n)
continue;
for(q=p->next;q!=NULL;q=q->next)
{
if(strcmp(p->num,q->num)==0)
{
printf("Student's number %s has been inputed repeatedly!\n",p->num);
*(t+n)=p;
n++;
break;
}
}
}
printf("Altogether %d number has been repeatedly inputed.\n",n);
free(t);
n=0;
printf("Now check data\n");
printf("Please input the minimum limit:");
scanf("%d%*c",&minlim);
printf("Please input the maximum limit:");
scanf("%d%*c",&maxlim);
if(maxlim<minlim)
{
printf("Input error!\n");
return;
}
for(p=head;p!=NULL;p=p->next)
{
for(i=0;i<num_of_sub;i++)
{
if(p->score[i]<minlim||p->score[i]>maxlim)
{
if(!n)
printf("These data has been wrongly inputed:\n");
printf("%s's %s score.\n",p->name,subcall[i]);
n++;
}
}
}
printf("Altogether %d wrong data.\n",n);
}
void Modify(struct data *head)
{
struct data *p;
char modname[LENGTH],modscore[LENGTH];
char reply,c;
int i;
system("cls");
do
{
printf("Please input the name of the student whose data you want to modify:");
scanf("%s%*c",modname);
for(p=head;p!=NULL&&strcmp(p->name,modname)!=0;p=p->next);
if(p==NULL)
printf("The student doesn't exist!\n");
else
{
printf("Successfully found!\n");
while(1)
{
printf("Do you want to modify the student's number(Y/N or y/n)?");
reply=getchar();
if(reply=='\n')
continue;
else
c=getchar();
if((reply=='Y'||reply=='N'||reply=='y'||reply=='n')&&c=='\n')
break;
else if(c!='\n')
while(c=getchar()!='\n');
}
if(reply=='Y'||reply=='y')
{
printf("Please input the student's new number:");
scanf("%s%*c",p->num);
}
while(1)
{
printf("Do you want to modify the student's score(Y/N or y/n)?");
reply=getchar();
if(reply=='\n')
continue;
else
c=getchar();
if((reply=='Y'||reply=='N'||reply=='y'||reply=='n')&&c=='\n')
break;
else if(c!='\n')
while(c=getchar()!='\n');
}
if(reply=='Y'||reply=='y')
{
do
{
printf("Please input the name of the subject whose score you want to modify:");
scanf("%s%*c",modscore);
for(i=0;i<num_of_sub;i++)
{
if(strcmp(subcall[i],modscore)==0)
{
p->sum-=p->score[i];
printf("Please input %s's new %s score:",p->name,modscore);
scanf("%f%*c",&p->score[i]);
p->sum+=p->score[i];
break;
}
}
if(i==num_of_sub)
printf("The subject doesn't exist!\n");
while(1)
{
printf("Do you want to go on modifying the student's other scores of subject(Y/N or y/n)?");
reply=getchar();
if(reply=='\n')
continue;
else
c=getchar();
if((reply=='Y'||reply=='N'||reply=='y'||reply=='n')&&c=='\n')
break;
else if(c!='\n')
while(c=getchar()!='\n');
}
}
while(reply=='Y'||reply=='y');
p->aver=p->sum/num_of_sub;
}
}
while(1)
{
printf("Do you want to go on modifying other students' data(Y/N or y/n)?");
reply=getchar();
if(reply=='\n')
continue;
else
c=getchar();
if((reply=='Y'||reply=='N'||reply=='y'||reply=='n')&&c=='\n')
break;
else if(c!='\n')
while(c=getchar()!='\n');
}
}
while(reply=='Y'||reply=='y');
}
void List(struct data *head)
{
struct data *p;
int n1=0,n2=0,k,i;
system("cls");
printf("name ");
for(p=head;p!=NULL;p=p->next)
{
k=strlen(p->name);
n1=(n1>k)?n1:k;
}
n1=(n1>4)?n1:4;
for(i=0;i<n1-4;i++)
putchar(' ');
printf("number ");
for(p=head;p!=NULL;p=p->next)
{
k=strlen(p->num);
n2=(n2>k)?n2:k;
}
n2=(n2>6)?n2:6;
for(i=0;i<n2-6;i++)
putchar(' ');
for(i=0;i<num_of_sub;i++)
printf("%s ",subcall[i]);
if(num_of_sub>0)
printf("sum aver");
putchar('\n');
for(p=head;p!=NULL;p=p->next)
{
printf("%s ",p->name);
k=strlen(p->name);
for(i=0;i<n1-k;i++)
putchar(' ');
printf("%s ",p->num);
k=strlen(p->num);
for(i=0;i<n2-k;i++)
putchar(' ');
for(i=0;i<num_of_sub;i++)
{
printf("%.1f ",p->score[i]);
k=strlen(subcall[i]);
for(;k-4>0;k--)
putchar(' ');
}
if(num_of_sub>0)
printf("%.2f %.2f",p->sum,p->aver);
putchar('\n');
}
printf("Altogether %d records.\n",num_of_stu);
}
void Search(struct data *head)
{
struct data *p;
char findname[LENGTH]={'\0'};
char findnum[LENGTH]={'\0'};
char reply,c;
int flag,n1,n2,k,i;
system("cls");
do
{
printf("Do you want to search the student by name(enter 1) or by number(enter 2)?");
scanf("%d%*c",&flag);
}
while(flag!=1&&flag!=2);
do
{
if(flag==1)
{
printf("Please input the name of the student you are finding:");
scanf("%s%*c",findname);
}
else
{
printf("Please input the number of the student you are finding:");
scanf("%s%*c",findnum);
}
for(p=head;p!=NULL;p=p->next)
{
if(strcmp(p->name,findname)==0||strcmp(p->num,findnum)==0)
{
printf("successfully found:\nname ");
n1=strlen(p->name);
n1=(n1>4)?n1:4;
for(i=0;i<n1-4;i++)
putchar(' ');
printf("number ");
n2=strlen(p->num);
n2=(n2>6)?n2:6;
for(i=0;i<n2-6;i++)
putchar(' ');
for(i=0;i<num_of_sub;i++)
printf("%s ",subcall[i]);
if(num_of_sub>0)
printf("sum aver");
putchar('\n');
printf("%s ",p->name);
k=strlen(p->name);
for(i=0;i<n1-k;i++)
putchar(' ');
printf("%s ",p->num);
k=strlen(p->num);
for(i=0;i<n2-k;i++)
putchar(' ');
for(i=0;i<num_of_sub;i++)
{
printf("%.1f ",p->score[i]);
k=strlen(subcall[i]);
for(;k-4>0;k--)
putchar(' ');
}
if(num_of_sub>0)
printf("%.2f %.2f",p->sum,p->aver);
putchar('\n');
break;
}
}
if(p==NULL)
printf("The student doesn't exist!\n");
while(1)
{
printf("Do you want to go on searching(Y/N or y/n)?");
reply=getchar();
if(reply=='\n')
continue;
else
c=getchar();
if((reply=='Y'||reply=='N'||reply=='y'||reply=='n')&&c=='\n')
break;
else if(c!='\n')
while(c=getchar()!='\n');
}
}
while(reply=='Y'||reply=='y');
}
struct data *Delete(struct data *head)
{
struct data *p,*q;
char delname[LENGTH]={'\0'};
char delnum[LENGTH]={'\0'};
char reply,c;
int flag;
system("cls");
do
{
printf("Do you want to delete all the data(enter 1) or just one student's data(enter 2)?");
scanf("%d%*c",&flag);
}
while(flag!=1&&flag!=2);
if(flag==1)
{
num_of_stu=0;
free(head);
printf("Successfully deleted!\n");
return NULL;
}
else
{
do
{
printf("Do you want to delete the data by name(enter 1) or by number(enter 2)?");
scanf("%d%*c",&flag);
}
while(flag!=1&&flag!=2);
do
{
if(flag==1)
{
printf("Please input the name of the student whose data you want to delete:");
scanf("%s%*c",delname);
}
else
{
printf("Please input the number of the student whose data you want to delete:");
scanf("%s%*c",delnum);
}
for(p=head;p!=NULL;q=p,p=p->next)
{
if(strcmp(p->name,delname)==0||strcmp(p->num,delnum)==0)
{
if(p==head)
head=p->next;
else
q->next=p->next;
num_of_stu--;
free(p);
printf("Successfully deleted!\n");
break;
}
}
if(p==NULL)
printf("The student doesn't exist!\n");
if(num_of_stu==0)
reply='N';
else
{
while(1)
{
printf("Do you want to go on deleting(Y/N or y/n)?");
reply=getchar();
if(reply=='\n')
continue;
else
c=getchar();
if((reply=='Y'||reply=='N'||reply=='y'||reply=='n')&&c=='\n')
break;
else if(c!='\n')
while(c=getchar()!='\n');
}
}
}
while(reply=='Y'||reply=='y');
return head;
}
}
struct data *Sort1(struct data *head,int (*g)(float,float))
{
struct data *p,*q,*t,*pf=NULL,*qf=NULL,*tf=NULL,*temp;
system("cls");
for(p=head;p!=NULL;pf=t,p=t->next)
{
t=p;
for(q=p->next;q!=NULL;qf=q,q=q->next)
{
if((*g)(q->sum,t->sum))
{
t=q;
tf=qf;
}
}
if(t!=p)
{
if(p==head)
head=t;
else
pf->next=t;
if(t==p->next)
{
p->next=t->next;
t->next=p;
}
else
{
temp=p->next;
p->next=t->next;
t->next=temp;
tf->next=p;
}
}
}
List(head);
return head;
}
void Sort2(struct data *head,int (*g)(float,float))
{
struct data **queue=(struct data**)malloc(num_of_stu*sizeof(struct data*));
struct data *p,*t;
int n1=0,n2=0,k,i,j;
system("cls");
if(queue==NULL)
{
printf("No enough memory!\n");
return;
}
while(n1<num_of_stu)
{
for(t=head;t!=NULL;t=t->next)
{
for(i=0;i<n1;i++)
{
if(t==queue[i])
break;
}
if(i==n1)
break;
}
for(p=t->next;p!=NULL;p=p->next)
{
for(i=0;i<n1;i++)
{
if(p==queue[i])
break;
}
if(i<n1)
continue;
if((*g)(p->sum,t->sum))
t=p;
}
queue[n1]=t;
n1++;
}
n1=0;
printf("name ");
for(i=0;i<num_of_stu;i++)
{
k=strlen(queue[i]->name);
n1=(n1>
展开阅读全文