数据结构----线性表操作(学生成绩管理) 数据结构。求程序。学生成绩管理(用顺序表)

\u6570\u636e\u7ed3\u6784\u7ebf\u6027\u8868\u7684\u64cd\u4f5c\uff0c\u5b66\u751f\u6210\u7ee9\u7ba1\u7406

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
struct student
{
char num[10];/* \u5b66\u53f7 */
char name[20];
char sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];/* \u6700\u8fd1\u66f4\u65b0\u65f6\u95f4 */
}; typedef struct node
{
struct student data;
struct node *next;
}Node,*Link; void menu()
{
printf("********************************************************************************");
printf("\t1\u767b\u8bb0\u5b66\u751f\u8d44\u6599\t\t\t\t\t2\u5220\u9664\u5b66\u751f\u8d44\u6599\n");
printf("\t3\u67e5\u8be2\u5b66\u751f\u8d44\u6599\t\t\t\t\t4\u4fee\u6539\u5b66\u751f\u8d44\u6599\n");
printf("\t5\u4fdd\u5b58\u5b66\u751f\u8d44\u6599\t\t\t\t\t6\u4f5c\u8005\u4ecb\u7ecd\n");
printf("\t0\u9000\u51fa\u7cfb\u7edf\n");
printf("********************************************************************************\n");
} void printstart()
{
printf("-----------------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>\u63d0\u793a:\u8f93\u5165\u9519\u8bef!\n");
} void Nofind()
{
printf("\n=====>\u63d0\u793a:\u6ca1\u6709\u627e\u5230\u8be5\u5b66\u751f!\n");
} void printc() /* \u672c\u51fd\u6570\u7528\u4e8e\u8f93\u51fa\u4e2d\u6587 */
{
printf(" \u5b66\u53f7\t \u59d3\u540d \u6027\u522b \u82f1\u8bed\u6210\u7ee9 \u6570\u5b66\u6210\u7ee9 C\u8bed\u8a00\u6210\u7ee9 \u603b\u5206 \u5e73\u5747\u5206\n");
} void printe(Node *p)/* \u672c\u51fd\u6570\u7528\u4e8e\u8f93\u51fa\u82f1\u6587 */
{
printf("%-12s%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.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
} Node* Locate(Link l,char findmess[],char nameornum[]) /* \u8be5\u51fd\u6570\u7528\u4e8e\u5b9a\u4f4d\u8fde\u8868\u4e2d\u7b26\u5408\u8981\u6c42\u7684\u63a5\u70b9\uff0c\u5e76\u8fd4\u56de\u8be5\u6307\u9488 */
{
Node *r;
if(strcmp(nameornum,"num")==0) /* \u6309\u5b66\u53f7\u67e5\u8be2 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /* \u6309\u59d3\u540d\u67e5\u8be2 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
} void Add(Link l) /* \u589e\u52a0\u5b66\u751f */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /* \u5c06\u6307\u9488\u7f6e\u4e8e\u6700\u672b\u5c3e */
while(1)
{
printf("\u8bf7\u4f60\u8f93\u5165\u5b66\u53f7(\u4ee5'0'\u8fd4\u56de\u4e0a\u4e00\u7ea7\u83dc\u5355:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>\u63d0\u793a:\u5b66\u53f7\u4e3a'%s'\u7684\u5b66\u751f\u5df2\u7ecf\u5b58\u5728,\u82e5\u8981\u4fee\u6539\u8bf7\u4f60\u9009\u62e9'4 \u4fee\u6539'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
} p=(Node *)malloc(sizeof(Node)); strcpy(p->data.num,num);
printf("\u8bf7\u4f60\u8f93\u5165\u59d3\u540d:");
scanf("%s",p->data.name);
getchar();
printf("\u8bf7\u4f60\u8f93\u5165\u6027\u522b:");
scanf("%s",p->data.sex);
getchar();
printf("\u8bf7\u4f60\u8f93\u5165c\u8bed\u8a00\u6210\u7ee9:");
scanf("%d",&p->data.cgrade);
getchar();
printf("\u8bf7\u4f60\u8f93\u5165\u6570\u5b66\u6210\u7ee9:");
scanf("%d",&p->data.mgrade);
getchar();
printf("\u8bf7\u4f60\u8f93\u5165\u82f1\u8bed\u6210\u7ee9:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;
/* \u4fe1\u606f\u8f93\u5165\u5df2\u7ecf\u5b8c\u6210 */
p->next=NULL;
r->next=p;
r=p;
shoudsave=1; }
} void Qur(Link l) /* \u67e5\u8be2\u5b66\u751f */
{
int sel;
char findmess[20];
Node *p; if(!l->next)
{
printf("\n=====>\u63d0\u793a:\u6ca1\u6709\u8d44\u6599\u53ef\u4ee5\u67e5\u8be2!\n");
return;
}
printf("\n=====>1\u6309\u5b66\u53f7\u67e5\u627e\n=====>2\u6309\u59d3\u540d\u67e5\u627e\n");
scanf("%d",&sel);
if(sel==1)/* \u5b66\u53f7 */
{
printf("\u8bf7\u4f60\u8f93\u5165\u8981\u67e5\u627e\u7684\u5b66\u53f7:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t\u67e5\u627e\u7ed3\u679c\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* \u59d3\u540d */
{
printf("\u8bf7\u4f60\u8f93\u5165\u8981\u67e5\u627e\u7684\u59d3\u540d:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t\u67e5\u627e\u7ed3\u679c\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong(); } void Del(Link l) /* \u5220\u9664 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>\u63d0\u793a:\u6ca1\u6709\u8d44\u6599\u53ef\u4ee5\u5220\u9664!\n");
return;
}
printf("\n=====>1\u6309\u5b66\u53f7\u5220\u9664\n=====>2\u6309\u59d3\u540d\u5220\u9664\n");
scanf("%d",&sel);
if(sel==1)
{
printf("\u8bf7\u4f60\u8f93\u5165\u8981\u5220\u9664\u7684\u5b66\u53f7:");
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=====>\u63d0\u793a:\u8be5\u5b66\u751f\u5df2\u7ecf\u6210\u529f\u5220\u9664!\n");
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("\u8bf7\u4f60\u8f93\u5165\u8981\u5220\u9664\u7684\u59d3\u540d:");
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=====>\u63d0\u793a:\u8be5\u5b66\u751f\u5df2\u7ecf\u6210\u529f\u5220\u9664!\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
} void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>\u63d0\u793a:\u6ca1\u6709\u8d44\u6599\u53ef\u4ee5\u4fee\u6539!\n");
return;
}
printf("\u8bf7\u4f60\u8f93\u5165\u8981\u4fee\u6539\u7684\u5b66\u751f\u5b66\u53f7:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\u8bf7\u4f60\u8f93\u5165\u65b0\u5b66\u53f7(\u539f\u6765\u662f%s):",p->data.num);
scanf("%s",p->data.num);
printf("\u8bf7\u4f60\u8f93\u5165\u65b0\u59d3\u540d(\u539f\u6765\u662f%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("\u8bf7\u4f60\u8f93\u5165\u65b0\u6027\u522b(\u539f\u6765\u662f%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("\u8bf7\u4f60\u8f93\u5165\u65b0\u7684c\u8bed\u8a00\u6210\u7ee9(\u539f\u6765\u662f%d\u5206):",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("\u8bf7\u4f60\u8f93\u5165\u65b0\u7684\u6570\u5b66\u6210\u7ee9(\u539f\u6765\u662f%d\u5206):",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("\u8bf7\u4f60\u8f93\u5165\u65b0\u7684\u82f1\u8bed\u6210\u7ee9(\u539f\u6765\u662f%d\u5206):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>\u63d0\u793a:\u8d44\u6599\u4fee\u6539\u6210\u529f!\n");
shoudsave=1;
}
else
Nofind(); } void Disp(Link l)
{
int count=0;
Node *p;
p=l->next; if(!p)
{
printf("\n=====>\u63d0\u793a:\u6ca1\u6709\u8d44\u6599\u53ef\u4ee5\u663e\u793a!\n");
return;
}
printf("\t\t\t\t\u663e\u793a\u7ed3\u679c\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
} void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* \u7528\u4e8e\u6307\u5411\u5206\u6570\u6700\u9ad8\u7684\u63a5\u70b9 */
Node *r=l->next;
if(!r)
{
printf("\n=====>\u63d0\u793a:\u6ca1\u6709\u8d44\u6599\u53ef\u4ee5\u7edf\u8ba1!\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("------------------------------\u7edf\u8ba1\u7ed3\u679c--------------------------------\n");
printf("\u603b\u5206\u6700\u9ad8\u8005:\t%s %d\u5206\n",pt->data.name,pt->data.totle);
printf("\u5e73\u5747\u5206\u6700\u9ad8\u8005:\t%s %d\u5206\n",pa->data.name,pa->data.ave); printf("\u82f1\u8bed\u6700\u9ad8\u8005:\t%s %d\u5206\n",pe->data.name,pe->data.egrade);
printf("\u6570\u5b66\u6700\u9ad8\u8005:\t%s %d\u5206\n",pm->data.name,pm->data.mgrade);
printf("c\u8bed\u8a00\u6700\u9ad8\u8005:\t%s %d\u5206\n",pc->data.name,pc->data.cgrade);
printstart();
}
void Writer()
{
printf(" \u6211\u5c31\u662f\u4f20\u8bf4\u4e2d\u7684SDDF.\u554a\u54c8\u54c8\n\n");
}
void Sort(Link l)
{
Link ll;
Node *p,*rr,*s; ll=(Link)malloc(sizeof(Node)); /* \u7528\u4e8e\u505a\u65b0\u7684\u8fde\u8868 */
ll->next=NULL; if(l->next==NULL)
{
printf("\n=====>\u63d0\u793a:\u6ca1\u6709\u8d44\u6599\u53ef\u4ee5\u6392\u5e8f!\n");
return ;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node)); /* \u65b0\u5efa\u63a5\u70b9\u7528\u4e8e\u4fdd\u5b58\u4fe1\u606f */
s->data=p->data;
s->next=NULL; rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>\u63d0\u793a:\u6392\u5e8f\u5df2\u7ecf\u5b8c\u6210!\n");
} void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>\u63d0\u793a:\u91cd\u65b0\u6253\u5f00\u6587\u4ef6\u65f6\u53d1\u751f\u9519\u8bef!\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=====>\u63d0\u793a:\u6587\u4ef6\u4fdd\u5b58\u6210\u529f.(\u6709%d\u6761\u8bb0\u5f55\u5df2\u7ecf\u4fdd\u5b58.)\n",count);
shoudsave=0;
}
fclose(fp);
} void main()
{
Link l;/* \u8fde\u8868 */
FILE *fp; /* \u6587\u4ef6\u6307\u9488 */
int sel;
char ch;
char jian; int count=0;
Node *p,*r;
printf("\t\t\t\t\u5b66\u751f\u6210\u7ee9\u7ba1\u7406\u7cfb\u7edf\n\t\t\t\t\n");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l; fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>\u63d0\u793a:\u6587\u4ef6\u8fd8\u4e0d\u5b58\u5728\uff0c\u662f\u5426\u521b\u5efa\uff1f(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>\u63d0\u793a:\u6587\u4ef6\u5df2\u7ecf\u6253\u5f00,\u6b63\u5728\u5bfc\u5165\u8bb0\u5f55......\n"); while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* \u5c06\u6587\u4ef6\u7684\u5185\u5bb9\u653e\u5165\u63a5\u70b9\u4e2d */
{
p->next=NULL;
r->next=p;
r=p; /* \u5c06\u8be5\u63a5\u70b9\u6302\u5165\u8fde\u4e2d */
count++;
}
} fclose(fp); /* \u5173\u95ed\u6587\u4ef6 */
printf("\n=====>\u63d0\u793a:\u8bb0\u5f55\u5bfc\u5165\u5b8c\u6bd5,\u5171\u5bfc\u5165%d\u6761\u8bb0\u5f55.\n",count); while(1)
{
menu();
printf("\u8bf7\u4f60\u9009\u62e9\u64cd\u4f5c:");
scanf("%d",&sel); if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>\u63d0\u793a:\u8d44\u6599\u5df2\u7ecf\u6539\u52a8,\u662f\u5426\u5c06\u6539\u52a8\u4fdd\u5b58\u5230\u6587\u4ef6\u4e2d(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>\u63d0\u793a:\u4f60\u5df2\u7ecf\u9000\u51fa\u7cfb\u7edf,\u518d\u89c1!\n");
break;
}
switch(sel)
{
case 1:Add(l);break; /* \u589e\u52a0\u5b66\u751f */
case 2:Del(l);break;/* \u5220\u9664\u5b66\u751f */
case 3:Qur(l);break;/* \u67e5\u8be2\u5b66\u751f */
case 4:Modify(l);break;/* \u4fee\u6539\u5b66\u751f */
case 5:Save(l);break;/* \u4fdd\u5b58\u5b66\u751f */
case 6:Writer();break;/*\u4f5c\u8005\u4ecb\u7ecd*/
case 9:printf("\t\t\t==========\u5e2e\u52a9\u4fe1\u606f==========\n");break;
default: Wrong();getchar();break;
}
}
}
/* */

#include
#include
#define N 10 //\u987a\u5e8f\u8868\u7684\u6700\u5927\u5bb9\u91cf
int length=0; //\u987a\u5e8f\u8868\u7684\u5f53\u524d\u5143\u7d20\u4e2a\u6570

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100//\u7ebf\u6027\u8868\u5b58\u50a8\u7684\u7a7a\u95f4\u521d\u59cb\u5316\u5206\u914d\u91cf
#define LISTINCREAMENT 10 //\u7ebf\u6027\u8868\u5b58\u50a8\u7a7a\u95f4\u7684\u5206\u914d\u589e\u91cf

typedef struct LNode//\u7ebf\u6027\u5355\u94fe\u8868\u5b58\u50a8\u7ed3\u6784
{
int data;
struct LNode *next;
}LNode,*LinkList;

int CreatList_L(LinkList&L)//\u521b\u5efa\u4e00\u4e2a\u7ebf\u6027\u94fe\u8868
{
L=(LinkList)malloc(sizeof(LNode));//\u5206\u914d\u4e00\u4e2a\u7a7a\u95f4\u7ed9\u94fe\u8868\uff0c\u4f5c\u4e3a\u5934\u7ed3\u70b9

if(!L) exit(OVERFLOW);
L->next=NULL;
return OK;
}
int DestroyList_L(LinkList &L)//\u9500\u6bc1\u94fe\u8868
{
if(L) free(L);
return OK;
}
int ListInsert_L(LinkList&L,int i,int e)//\u518d\u7ec3\u8868\u7684\u7b2ci\u4e2a\u5143\u7d20\u524d\u63d2\u5165\u4e00\u4e2a\u5143\u7d20e
{
LinkList p=L;//p\u6307\u9488\u5b9a\u4f4d\u4e8ei-1
LNode *s;
int j=0;
while(p&&jnext;j++;}//\u5b9a\u4f4d
if(!p||j>i-1) return ERROR;//\u5982\u679ci<1\u6216\u5927\u4e8e\u94fe\u8868\u5143\u7d20\u4e2a\u6570+1
s=(LNode*)malloc(sizeof(LNode));
if(!s) exit(OVERFLOW);
s->data=e; //\u5b8c\u6210\u63d2\u5165\u64cd\u4f5c
s->next=p->next;
p->next=s;
return OK;
}

int ListDelet_L(LinkList&L,int i,int&e)//\u5220\u9664\u94fe\u8868L\u4e2d\u7684\u7b2ci\u4e2a\u5143\u7d20\uff0c\u5e76\u8fd4\u56de\u7ed9e;
{
LinkList p=L;
LNode* q;
int j=0;
while(!p&&jnext;j++;}//p\u6307\u9488\u5b9a\u4f4d\u4e8ei-1\uff1b
if(!p->next||j>i-1) return ERROR;

e=p->next->data; //\u5b8c\u6210\u5220\u9664\u64cd\u4f5c
q=p->next;
p->next=p->next->next;
free(q);
return OK;


}

int ListTraverse_L(LinkList L,int n)//\u94fe\u8868\u7684\u904d\u5386
{
int i=0;
if(!L)return ERROR;
L=L->next;
while(L)
{
if(L->data==n)return i;
L=L->next;
i++;
}

return FALSE;
}

int InverseSingleList_L(LinkList &L)
{
if(!L->next||!L->next->next)//\u5982\u679c\u94fe\u8868\u5c11\u4e8e2\u4e2aNode\u90a3\u4e48\u94fe\u8868\u4e0d\u9700\u8981\u6539\u53d8\u987a\u5e8f
return OK;
LNode *p,*q;
p=L->next; //\u7b2c\u4e00\u6b21\u56e0\u4e3ap\u662f\u6700\u540e\u4e00\u4e2a\u8fde\u63a5\u6240\u4ee5\u628ap->next\u8bbe\u4e3a\u7a7a
q=p->next;
p->next=NULL;
p=q;
while(p)
{
q=p->next; //\u7528q\u53bb\u4fdd\u7559p\u540e\u9762\u4e00\u4e2aNode;
p->next=L->next;
L->next=p;
p=q;
}
return OK;
}

int main()
{
int List[N];
LinkList L;

int ch,exit='N';
do
{
system("CLS");
printf("\t\t********************************************\n");
printf("\t\t* 1.\u521b\u5efa\u4e00\u4e2a\u987a\u5e8f\u8868 .........(1) *\n");
printf("\t\t* 2.\u5728\u987a\u5e8f\u8868\u4e2d\u67e5\u627e\u5143\u8868.........(2) *\n");
printf("\t\t* 3.\u5728\u987a\u5e8f\u8868\u4e2d\u63d2\u5165\u5143\u8868.........(3) *\n");
printf("\t\t* 4.\u5728\u987a\u5e8f\u8868\u4e2d\u5220\u9664\u5143\u8868.........(4) *\n");
printf("\t\t* 5.\u9000\u51fa .........(5) *\n");
printf("\t\t********************************************\n");
printf("\n\u8bf7\u9009\u62e9\u64cd\u4f5c\u4ee3\u7801\uff1a");
ch=getchar();

switch(ch)
{
case '1':
printf("\n\u8bf7\u8f93\u5165\u5341\u4e2a\u5143\u7d20");
CreatList_L(L);
for(length=0;length<N;length++)
{
scanf("%d",&List[length]);
getchar();
ListInsert_L(L,length+1,List[length]);
}
printf("\n\u521b\u5efa\u6210\u529f\uff01");
getchar();
break;
case '2':
scanf("%d",&List[0]);
if(ListTraverse_L(L,List[0]))printf("\u8be5\u5143\u7d20\u5b58\u5728\u8be5\u5e74\u8868\u7684\u7b2c%d\u4e2a\u4f4d\u7f6e",ListTraverse_L(L,List[0]));
else printf("\u4e0d\u5b58\u5728\u8be5\u5143\u7d20");
getchar();
break;
case '3':
scanf("%d%d",&length,&List[0]);
ListInsert_L(L,length,List[0]);
system("pause");
break;
case '4':
scanf("%d",&length);
ListDelet_L(L,length,List[0]);
system("pause");
break;
case '5':
printf("\n\u60a8\u662f\u5426\u771f\u7684\u8981\u9000\u51fa\u7a0b\u5e8f(Y/N):");
getchar();
exit=getchar();
break;
default:
getchar();
printf("\n\u65e0\u6548\u8f93\u5165\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9...:");
getchar();
break;

}

}while(exit!='y'&&exit!='Y');

}

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
struct student
{
char num[10];/* 学号 */
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()
{
printf("********************************************************************************");
printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n");
printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n");
printf("\t5保存学生资料\t\t\t\t\t6作者介绍\n");
printf("\t0退出系统\n");
printf("********************************************************************************\n");
} void printstart()
{
printf("-----------------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>提示:输入错误!\n");
} void Nofind()
{
printf("\n=====>提示:没有找到该学生!\n");
} void printc() /* 本函数用于输出中文 */
{
printf(" 学号\t 姓名 性别 英语成绩 数学成绩 C语言成绩 总分 平均分\n");
} void printe(Node *p)/* 本函数用于输出英文 */
{
printf("%-12s%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.egrade,p->data.mgrade,p->data.cgrade,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; /* 将指针置于最末尾 */
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)); strcpy(p->data.num,num);
printf("请你输入姓名:");
scanf("%s",p->data.name);
getchar();
printf("请你输入性别:");
scanf("%s",p->data.sex);
getchar();
printf("请你输入c语言成绩:");
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入数学成绩:");
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入英语成绩:");
scanf("%d",&p->data.egrade);
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];
Node *p; if(!l->next)
{
printf("\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(); } void Del(Link l) /* 删除 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\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)
{
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];
if(!l->next)
{
printf("\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("请你输入新的c语言成绩(原来是%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.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>提示:资料修改成功!\n");
shoudsave=1;
}
else
Nofind(); } void Disp(Link l)
{
int count=0;
Node *p;
p=l->next; if(!p)
{
printf("\n=====>提示:没有资料可以显示!\n");
return;
}
printf("\t\t\t\t显示结果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
} void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点 */
Node *r=l->next;
if(!r)
{
printf("\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");
printf("总分最高者:\t%s %d分\n",pt->data.name,pt->data.totle);
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave); printf("英语最高者:\t%s %d分\n",pe->data.name,pe->data.egrade);
printf("数学最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade);
printf("c语言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade);
printstart();
}
void Writer()
{
printf(" 我就是传说中的SDDF.啊哈哈\n\n");
}
void Sort(Link l)
{
Link ll;
Node *p,*rr,*s; ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表 */
ll->next=NULL; if(l->next==NULL)
{
printf("\n=====>提示:没有资料可以排序!\n");
return ;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息 */
s->data=p->data;
s->next=NULL; rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:排序已经完成!\n");
} void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\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);
shoudsave=0;
}
fclose(fp);
} void main()
{
Link l;/* 连表 */
FILE *fp; /* 文件指针 */
int sel;
char ch;
char jian; int count=0;
Node *p,*r;
printf("\t\t\t\t学生成绩管理系统\n\t\t\t\t\n");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l; fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>提示:文件已经打开,正在导入记录......\n"); while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中 */
{
p->next=NULL;
r->next=p;
r=p; /* 将该接点挂入连中 */
count++;
}
} fclose(fp); /* 关闭文件 */
printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count); 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);
}
printf("\n=====>提示:你已经退出系统,再见!\n");
break;
}
switch(sel)
{
case 1:Add(l);break; /* 增加学生 */
case 2:Del(l);break;/* 删除学生 */
case 3:Qur(l);break;/* 查询学生 */
case 4:Modify(l);break;/* 修改学生 */
case 5:Save(l);break;/* 保存学生 */
case 6:Writer();break;/*作者介绍*/
case 9:printf("\t\t\t==========帮助信息==========\n");break;
default: Wrong();getchar();break;
}
}
}
/* */

  • 鏁版嵁缁撴瀯 2.2 绾挎ц〃涓彃鍏ュ厓绱鎿嶄綔
    绛旓細甯岃禌鏁欒偛璁$畻鏈轰笓涓氳冪爺涓撲笟璇捐緟瀵兼嫑鐢 甯岃禌鏁欒偛璁$畻鏈轰笓涓氳冪爺涓撲笟璇捐緟瀵艰棰 甯岃禌鏁欒偛璁$畻鏈鸿冪爺涓撲笟璇惧湪绾挎祴璇曠郴缁 鎻掑叆鍏冪礌 浣跨嚎鎬ц〃鐨勯昏緫缁撴瀯鍙戠敓浠涔堝彉鍖栵紵鍋囪鍦ㄧ嚎鎬ц〃鐨勭i涓厓绱犱箣鍓嶆彃鍏ヤ竴涓厓绱爀 浣垮緱绾挎ц〃(a 鈥 a i a i 鈥 a n) 鏀瑰彉涓 (a 鈥 a i e a i 鈥 a n )鍗 ( ) ...
  • 鏁版嵁缁撴瀯绾挎ц〃瀹為獙
    绛旓細鐢眓(n鈮0)涓鏁版嵁鍏冪礌(缁撶偣)a1,a2,鈥,an缁勬垚鐨勬湁闄愬簭鍒椼傛暟鎹厓绱犵殑涓暟n瀹氫箟涓鸿〃鐨勯暱搴︺傚綋n=0鏃剁О涓虹┖琛ㄣ傚父甯稿皢闈炵┖鐨绾挎ц〃(n>0)璁颁綔锛 (a1锛宎2锛屸n)鏁版嵁鍏冪礌ai(1鈮鈮)鍙槸涓涓娊璞$殑绗﹀彿锛屽叾鍏蜂綋鍚箟鍦ㄤ笉鍚岀殑鎯呭喌涓嬪彲浠ヤ笉鍚屻傜嚎鎬ц〃鐨勫熀鏈鎿嶄綔 1锛塎akeEmpty(L) 杩欐槸涓涓...
  • 浠涔堟槸绾挎ц〃
    绛旓細绾挎ц〃鏄渶鍩烘湰銆佹渶绠鍗曘佷篃鏄渶甯哥敤鐨勪竴绉鏁版嵁缁撴瀯銆绾挎ц〃锛linear list锛夋槸鏁版嵁缁撴瀯鐨勪竴绉嶏紝涓涓嚎鎬ц〃鏄痭涓叿鏈夌浉鍚岀壒鎬х殑鏁版嵁鍏冪礌鐨勬湁闄愬簭鍒椼傜嚎鎬ц〃涓暟鎹厓绱犱箣闂寸殑鍏崇郴鏄竴瀵逛竴鐨勫叧绯伙紝鍗抽櫎浜嗙涓涓拰鏈鍚庝竴涓暟鎹厓绱犱箣澶栵紝鍏跺畠鏁版嵁鍏冪礌閮芥槸棣栧熬鐩告帴鐨勶紙娉ㄦ剰锛岃繖鍙ヨ瘽鍙傜敤澶ч儴鍒嗙嚎鎬ц〃锛岃屼笉...
  • 鏁版嵁缁撴瀯绾挎ц〃鍩烘湰鎿嶄綔
    绛旓細L.length++;//琛ㄩ暱澧炲姞 return OK;*/ q=&(L.elem[i-1]);//鎸囬拡鎿嶄綔 for(p=&(L.elem[L.length-1]); p>=q; --p){ (p+1)=*p;} q=e;++L.length;return OK;} int main(){ int i,n,x,k;SqList La;cout<<"璇疯緭鍏绾挎ц〃La鐨勯暱搴:";cin>>n;cout<<"璇疯緭鍏ョ嚎鎬ц〃La涓...
  • 绾挎鐨鏁版嵁缁撴瀯鏈夊摢鍑犵?鍚勬湁浠涔堢壒鐐
    绛旓細绾挎х殑鏁版嵁缁撴瀯鏈夛細绾挎ц〃銆佹爤銆侀槦鍒椼佸弻绔槦鍒椼佹暟缁勫拰涓 1銆佺嚎鎬ц〃 绾挎ц〃鏄渶鍩烘湰銆佹渶绠鍗曘佷篃鏄渶甯哥敤鐨勪竴绉嶆暟鎹粨鏋勩備竴涓嚎鎬ц〃鏄痭涓叿鏈夌浉鍚岀壒鎬х殑鏁版嵁鍏冪礌鐨勬湁闄愬簭鍒椼傜壒鐐癸細绾挎ц〃涓暟鎹厓绱犱箣闂寸殑鍏崇郴鏄竴瀵逛竴鐨勫叧绯伙紱绾挎ц〃鐨勯昏緫缁撴瀯绠鍗曪紝渚夸簬瀹炵幇鍜鎿嶄綔銆2銆佹爤 鏍堝張鍚嶅爢鏍堬紝瀹冩槸涓绉...
  • 鏁版嵁缁撴瀯绾挎ц〃鎶借薄鏁版嵁绫诲瀷鐨勫畾涔夐噷闈㈢殑鍩烘湰鎿嶄綔鐨勫吀鍨嬫搷浣滆鑳岀啛鍚...
    绛旓細L.length=0;//绾挎ц〃鐨勫凡鏈夐暱搴︿负0 L.listsize=LIST_INIT_SIZE;//杩欎釜绾挎ц〃鏈澶ц兘瑁呬笅100涓狤lemType绫诲瀷鐨勬暟鎹厓绱 return OK;}杩欎釜鏄疄楠屽唽涓婂啓鐨勫嚱鏁扮殑瀹炰綋閮ㄥ垎锛屽悗闈㈡槸鏈汉鐨勪竴浜涚悊瑙o紝甯屾湜瀵逛綘鏈変簺甯姪銆鏁版嵁缁撴瀯鏄竴闂ㄧ畻娉曠殑璇剧▼锛岄噸鐐规槸绠楁硶锛屼綘瑕佺煡閬撲竴涓簨浠舵槸濡備綍瀹炵幇鐨勶紝鍑芥暟濡備綍鍐欍傘
  • 濡備綍鐢绾挎ц〃鍌ㄥ瓨浜斾釜鏁板瓧骞惰緭鍑
    绛旓細杩欏睘浜鏁版嵁缁撴瀯棰樸 鍙傝冧緥瀛: 绾挎ц〃鐨勯摼寮忓瓨鍌ㄤ笌鍩烘湰鎿嶄綔 鍒╃敤绾挎ц〃鐨勯摼寮忓瓨鍌ㄧ粨鏋,璁捐涓缁勮緭鍏ユ暟鎹(鍋囧畾涓轰竴缁勬暣鏁),鑳藉瀵瑰崟閾捐〃杩涜濡備笅鎿嶄綔: 鍒濆鍖栦竴涓甫琛ㄥご缁撶偣鐨勭┖閾捐〃; 鍒涘缓涓涓崟閾捐〃鏄粠鏃犲埌鏈夊湴寤虹珛璧蜂竴涓摼琛,鍗充竴涓竴涓湴杈撳叆鍚勭粨鐐规暟鎹,骞跺缓绔嬭捣鍓嶅悗鐩镐簰閾炬帴鐨勫叧绯汇傚張鍒嗕负閫嗕綅搴(鎻掑湪琛ㄥご...
  • 鏁版嵁缁撴瀯 绾挎ц〃
    绛旓細鍐欏嚭绠楁硶琚皟鐢ㄥ悗鐨绾挎ц〃L:36 ,12,8,50,25,5,15 InsertRear(L,25) 25鎻掑叆琛ㄥ熬锛孖nsertFront(L,50) 50鎻掑叆琛ㄥご,琛ㄤ负:50,25 a[4]={5,8,12,15,36} 褰揳%2==0鏃(a涓哄伓鏁帮級鏃禝nsertFront鎻掑叆琛ㄥご锛宎涓哄鏁版椂鎻掑叆琛ㄥ熬 5鎻掑叆琛ㄥ熬锛岃〃鍙樹负锛50,25,5 8鎻掑叆琛ㄥご锛岃〃鍙樹负: 8,50,25,...
  • 鏁版嵁缁撴瀯瀹為獙:绾挎ц〃鐨勯『搴忚〃绀哄拰閾惧紡琛ㄧず鍙婃彃鍏ャ佸垹闄ゃ佹煡鎵捐繍绠梍鐧 ...
    绛旓細杩欐槸鎴戠殑绗竴娆′笂鏈哄疄楠岃鐨勫唴瀹规潵鍛!include <stdio.h> include <stdlib.h> include<conio.h> struct list //缁撶偣绫诲瀷 { int data;struct list *next;};struct list *head;//澹版槑缁撶偣鎸囬拡 int static length;//澹版槑琛ㄩ暱鍙橀噺 struct list *creat_n()//鍒涘缓鏈塶涓厓绱犵殑閾捐〃 { struct list...
  • 鏁版嵁缁撴瀯涓昏瀛︿粈涔堝唴瀹
    绛旓細銆鏁版嵁缁撴瀯銆嬩富瑕佸涔绾挎ц〃銆佹爤鐨勯槦鍒楀拰鏁扮粍銆佹爲涓庝簩鍙夋爲銆佸浘銆傝缁嗗唴瀹瑰涓嬶細1銆佺嚎鎬ц〃锛氱嚎鎬ц〃鐨勫畾涔夊拰鍩烘湰鎿嶄綔銆佺嚎鎬ц〃鐨勫疄鐜般侀『搴忓瓨鍌ㄧ粨鏋勶紱2銆佹爤鐨勯槦鍒楀拰鏁扮粍锛氭爤鍜岄槦鍒楃殑鍩烘湰姒傚康銆佹爤鍜岄槦鍒楃殑椤哄簭瀛樺偍缁撴瀯銆佹爤鍜岄槦鍒楃殑閾惧紡瀛樺偍缁撴瀯銆佹爤鍜岄槦鍒楃殑搴旂敤銆佺壒娈婄煩闃电殑鍘嬬缉瀛樺偍锛3銆佹爲涓庝簩鍙夋爲锛氭爲鐨...
  • 扩展阅读:数据分析怎么做 ... 数据结构耿国华答案pdf ... 常见的三种数据结构 ... 数据结构电子书 ... 统计表格 ... 数据结构题集电子版 ... 结构化数据有哪三种 ... 数据结构填空题及答案 ... 大二数据结构实验报告 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网