报告软件工程课程设计实验报告-学生信息管理系统.doc 联系客服

发布时间 : 星期日 文章报告软件工程课程设计实验报告-学生信息管理系统.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\

课件