发布时间 : 星期日 文章报告软件工程课程设计实验报告-学生信息管理系统.doc更新完毕开始阅读939484cbacf8941ea76e58fafab069dc50224795
专业课件 v=l->next;
while(v) /*查询该学号是否存在,flag=1表示该学号存在*/ {
if(strcmp(v->data.num,s)==0) {flag=1;break;} v=v->next; }
if(flag==1)
break; /*若学号存在,则进行插入之前的新记录的输入操作*/ else {
getchar();
printf(\ scanf(\ if(ch=='y'||ch=='Y') continue; else
return; } }
stringinput(num,10,\ /*以新记录的输入操作与Add()相同*/ v=l->next; while(v) {
if(strcmp(v->data.num,num)==0) {
printf(\ printheader(); printdata(v); printf(\ getchar(); return; }
v=v->next; }
newinfo=(Node *)malloc(sizeof(Node)); if(!newinfo) {
printf(\如没有申请到,打印提示信息*/ return ; /*返回主界面*/ }
strcpy(newinfo->data.num,num);
stringinput(newinfo->data.name,15,\
newinfo->data.cgrade=numberinput(\
课件
专业课件 newinfo->data.mgrade=numberinput(\ newinfo->data.egrade=numberinput(\
newinfo->data.total=newinfo->data.egrade+newinfo->data.cgrade+newinfo->data.mgrade; newinfo->data.ave=(float)(newinfo->data.total/3); newinfo->data.mingci=0; newinfo->next=NULL; saveflag=1;
p=l->next; /*将指针赋值给p,因为l中的头节点的下一个节点才实际保存着学生的记录*/
while(1) {
if(strcmp(p->data.num,s)==0) /*在链表中插入一个节点*/ {
newinfo->next=p->next; p->next=newinfo; break; }
p=p->next; }
Disp(l);
printf(\ getchar(); }
void Tongji(Link l) /*统计总分,单科第一和各科不及格人数*/ {
Node *pm,*pe,*pc,*pt; /*用于指向分数最高的节点*/ Node *r=l->next;
int countc=0,countm=0,counte=0; /*保存三门成绩中不及格的人数*/ if(!r) {
system(\
printf(\ getchar(); return ; }
system(\ Disp(l);
pm=pe=pc=pt=r; while(r) {
if(r->data.cgrade<60) countc++;
课件
专业课件 if(r->data.mgrade<60) countm++; if(r->data.egrade<60) counte++;
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.total>=pt->data.total) pt=r;
r=r->next; }
printf(\ printf(\ %d (ren)\\n\ printf(\ <60: %d (ren)\\n\ printf(\ <60: %d (ren)\\n\
printf(\
printf(\highest student by total scroe name:%s totoal score:%d\\n\
printf(\highest student by English score name:%s totoal score:%d\\n\
printf(\highest student by Math score name:%s totoal score:%d\\n\
printf(\highest student by C score name:%s totoal score:%d\\n\ printf(\ getchar(); }
void Sort(Link l) /*利用插入法排序实现单链表的按总分字段的降序排序,从高到低*/ {
Link ll;
Node *p,*rr,*s; int i=0;
if(l->next==NULL) {
system(\
printf(\ getchar(); return ; }
ll=(Node*)malloc(sizeof(Node)); if(!ll) {
printf(\如没有申请到,打印提示信息*/ return ;
课件
专业课件 }
ll->next=NULL; system(\ Disp(l);
p=l->next; while(p) {
s=(Node*)malloc(sizeof(Node)); /*s用于保存从原链表中取出的节点信息*/ if(!s) {
printf(\ return ; }
s->data=p->data; s->next=NULL;
rr=ll; /*rr链表存储插入单个节点后保持排序的链表,ll是这个链表的头指针,每次从头开始查找插入位置*/
while(rr->next != NULL && rr->next->data.total >= p->data.total)
rr=rr->next; /*指针移至总分比p所指的节点的总分小的节点位置*/
if(rr->next==NULL)/*若新链表ll中的所有节点的总分值都比p->data.total大时,就将p所指节点加入链表尾部*/ rr->next=s;
else /*否则将该节点插入至第一个总分字段比它小的节点的前面*/ {
s->next=rr->next; rr->next=s; }
p=p->next; /*原链表中的指针下移一个节点*/ }
l->next=ll->next; /*ll中存储是的已排序的链表的头指针*/
p=l->next; /*已排好序的头指针赋给p,准备填写名次*/ while(p) /*当p不为空时,进行下列操作*/ {
i++; /*结点序号*/
p->data.mingci=i; /*将名次赋值*/ p=p->next; /*指针后移*/ }
Disp(l);
printf(\ =====>Sort complete!\\n\
课件