当前位置:文档之家› 数据结构课程设计说明书

数据结构课程设计说明书

数据结构课程设计说明书课程设计题目:学生成绩管理系统系别:计算机工程系专业班级:通信102班学号:201000402049姓名:黄绍耕同组同学:无指导教师:原庆能完成日期:2011年12月1日一、问题描述:要求以学生成绩管理业务为背景,设计一个“学生成绩管理系统”程序。

主要对学生资料的录入、浏览、插入和删除等基本功能的实现。

二、设计内容简介:编制一个学生管理程序。

设学生成绩以一个学生一条记录的形式存储,每个学生记录包含的信息有学号和各门功课的成绩。

设每位学生学习数学、英语、语文、物理和化学五门课程。

管理学生的成绩适合用单链表,方便随时插入和删除学生记录,实现动态管理。

一个学生作为一个结点,该结点类型为结构体,结构体中域表示学生的属性。

每个结点除了存放属性外,还存放指向后继结点的指针。

三、数据结构:本课程设计使用单链表作为实现该问题的数据结构。

四、程序具体代码:#include<string.h>#include<malloc.h>#include<stdlib.h>#include<stdio.h>typedef struct node{char num[110];int shuxue;int yingyu;int yuwen;int wuli;int huaxue;struct node * next;}LinkList; /*定义单链表*/typedef struct node LinkList;void CreatLinkList(LinkList * head) /*建立链表*/{char num[110];int scor,scor1,scor2,scor3,scor4;LinkList * p=head;LinkList * s;printf("请输入学生的学号,输入0结束输入:\n");scanf("%s",&num);while (1){if(strcmp(num,"0")==0)break;s=(LinkList *)malloc(sizeof(LinkList));strcpy(s->num,num);printf("请输入数学的成绩:\n");scanf("%d",&scor);s->shuxue=scor;printf("请输入英语的成绩:\n");scanf("%d",&scor1);s->yingyu=scor1;printf("请输入语文的成绩:\n");scanf("%d",&scor2);s->yuwen=scor2;printf("请输入物理的成绩:\n");scanf("%d",&scor3);s->wuli=scor3;printf("请输入化学的成绩:\n");scanf("%d",&scor4);s->huaxue=scor4;p->next=s;s->next=NULL;p=s;printf("请输入学生的学号,输入0结束输入:\n");scanf("%s",&num);}}void InsertStu(LinkList * head,char num[],int * n) /*单链表的结点插入模块*/ {LinkList * p;LinkList * s;int scor,scor1,scor2,scor3,scor4;int flag=0;printf("请输数学成绩:\n");scanf("%d",&scor);printf("请输入英语成绩:\n");scanf("%d",&scor1);printf("请输入语文的成绩:\n");scanf("%d",&scor2);printf("请输入物理的成绩:\n");scanf("%d",&scor3);printf("请输入化学的成绩:\n");scanf("%d",&scor4);p=head;while(p->next!=NULL){if(strcmp(p->next->num,num)==0){flag=1;break;}p=p->next;}if(flag==1){p->next->shuxue=scor;p->next->yingyu=scor1;p->next->yuwen=scor2;p->next->wuli=scor3;p->next->huaxue=scor4;}else{s=(LinkList*)malloc(sizeof(LinkList));strcpy(s->num,num);s->shuxue=scor;s->yingyu=scor1;s->yuwen=scor2;s->wuli=scor3;s->huaxue=scor4;p->next=s;p=s;s->next=NULL;*n=*n+1;}}int DeleStu(LinkList * head,char num[],int *n) /*删除学生*/ {LinkList * p=head;LinkList * s;if(p->next==NULL){printf("学生表中没有任何的学生记录\n");return 0;}else{while(p!=NULL){s=p->next;if(s!=NULL){if(strcmp(s->num,num)==0){p->next=s->next;*n=*n+1;break;}}p=p->next;}printf("学生表中没有该学生记录\n");return 0;}}void DisplayStu(LinkList *head) /*浏览学生链表*/{LinkList * h=head->next;printf("学号数学英语语文物理化学\n");while(h!=NULL){printf("%s\t%d\t%d\t%d\t%d\t%d\n",h->num,h->shuxue,h->yingyu,h->yuwen,h->wuli,h->huaxue);h=h->next;}}void statistics(LinkList *p){int sum;while(p){printf("学号:%s\n",p->num);sum=p->shuxue+p->yingyu+p->yuwen+p->wuli+p->huaxue;printf("总分:%d\n",sum);printf("平均分:%d\n",sum/5);p=p->next;}}void main(){LinkList * head;char num[110];int flag=0;int n=0;head=(LinkList *)malloc(sizeof(struct node));head->next=NULL;CreatLinkList(head);printf("学生总数为%d\n",n);if (head->next!=NULL)DisplayStu(head);statistics(head->next);printf("\n");printf("请输入要插入的学生的学号,以0结束\n");scanf("%s",&num);while(1){if(strcmp(num,"0")==0) break;InsertStu(head,num,&n);printf("学生总数为%d\n",n);DisplayStu(head);scanf("%s",&num);}printf("请输入要删除的学生的学号,以0结束\n");scanf("%s",&num);while(1){if(strcmp(num,"0")==0) break;flag=DeleStu(head,num,&n);printf("学生的总数为%d\n",n);DisplayStu(head);scanf("%s",&num);}}五、运行与测试首先依次输入学生信息:插入界面:删除界面:六、结束语通过本学期的学习与这次的课程设计我学会了如何运用C语言与数据结构结合来编制出来的学生成绩管理系统,加强了我的动手编程能力。

同时,我也掌握了对单链表的运用。

在解决问题的过程中,我体会到了数据结构这门课程对于软件设计的重要性,也体会到了程序设计是由算法和数据结构两个部分组成的。

相关主题