最新VC--综合实验-图书馆管理系统.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateVC-综合实验-图书馆管理系统VC+综合实验 图书馆管理系统VC+综合实验 图书馆管理系统.txt都是一个山的狐狸,你跟我讲什么聊斋,站在离你最近的地方,眺望你对别人的微笑,即使心是百般的疼痛只为把你的一举一动尽收眼底刺眼的白色,让我明白什么是纯粹的伤害。#include<stdio.h>#include<stdlib.h>#include<string.h>#define LENGTH 20#define SUBJECT 10char subcallSUBJECTLENGTH;int num_of_stu=0;int num_of_sub=0;struct datachar nameLENGTH;char numLENGTH;float scoreSUBJECT;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 *choice9="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(choicei);n=(n>k)?n:k;while(1)system("cls");printf("ttWelcome to the Students' Score Management Systemn"); printf("ttt-n"); for(i=0;i<9;i+) printf("ttt| %s",choicei); k=strlen(choicei); for(;n-k>0;k+) putchar(' '); printf("|n");printf("ttt-n");while(1)printf("Please input your choice:"); reply=getchar(); if(reply='n')continue;elsec=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;elsec=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;elsewhile(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",subcalli);elsefor(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:",subcalli);scanf("%f%*c",&p->scorei);p->sum+=p->scorei;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;elsec=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;elsep->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 datan");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->scorei<minlim|p->scorei>maxlim)if(!n)printf("These data has been wrongly inputed:n");printf("%s's %s score.n",p->name,subcalli);n+;printf("Altogether %d wrong data.n",n);void Modify(struct data *head)struct data *p;char modnameLENGTH,modscoreLENGTH;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"); elseprintf("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(subcalli,modscore)=0)p->sum-=p->scorei; printf("Please input %s's new %s score:",p->name,modscore); scanf("%f%*c",&p->scorei);p->sum+=p->scorei; 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 ",subcalli);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->scorei);k=strlen(subcalli);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 findnameLENGTH='0'char findnumLENGTH='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);doif(flag=1) printf("Please input the name of the student you are finding:"); scanf("%s%*c",findname);elseprintf("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 ",subcalli); 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->scorei);k=strlen(subcalli); 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 delnameLENGTH='0'char delnumLENGTH='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;elsedo 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);doif(flag=1) printf("Please input the name of the student whose data you want to delete:"); scanf("%s%*c",delname);elseprintf("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;elseq->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;elsepf->next=t;if(t=p->next)p->next=t->next;t->next=p;elsetemp=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=queuei)break;if(i=n1)break; for(p=t->next;p!=NULL;p=p->next) for(i=0;i<n1;i+) if(p=