资源描述
学生成绩管理系统数据结构程序设计实验报告2
———————————————————————————————— 作者:
———————————————————————————————— 日期:
14
个人收集整理 勿做商业用途
实 验 报 告
课程名称 数据结构综合设计实验
实验项目 学生成绩管理系统
系 别___ _计算机学院 _ ______
专 业___ 网络工程 ___
班级/学号_网工1202/2012011411___
学生姓名 _______王宇涵__________
实验日期 _2014年6月6日
成 绩 _______________________
指导教师 黄改娟 田英爱
数据结构综合实验设计-——————学生成绩管理系统
1. 需求分析
系统主要管理学生信息及成绩信息排序等事项。根据需要可以查询学生的信息。主要功能包括如下。
(1) 使用中文菜单,界面升级和用户输入要人性化.
(2) 将学生信息保存到文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后在对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中。
(3) 具有数据输入功能,输入的数据能最终保存在文件中。
(4) 具有数据删除功能,能最终从文件中删除。
(5) 排序功能,根据自己设计的数据结构,升级排序算法。
(6) 具有多种查询及输出功能。
(7) 其他功能。
(8) 学生信息的修改。
2. 设计方案
总体功能结构
输入学生成绩
输出学生成绩
查询学生成绩
插入学生成绩
按总分排名
主界面 删除学生信息
退出系统
3函数
Struct Student//结构体
{
Int term;//学期
Int num;//学号
Char name[12];姓名
Float mrak1;成绩
Float mark2;
Float mark3;
Float sum;//总分
Float average;//平均分
};
void input(list *head) 输入函数
void output(list *h) 输出函数
void sortsum(list *head) 总成绩排名
void sortnum(list *head)按学号排名
void find (list *h)查找主函数
list *del (list *h)删除函数
list *insert(list *h)插入函数
4程序代码
#include 〈stdio。h〉
#include 〈stdlib。h>
#include 〈malloc。h>
#define MAXLEN 100
#define Null 0
/**************************/
int count = 0;
/**************************/
typedef struct node {
int num; // 学号
char name[MAXLEN]; // 姓名
/******************************/
char sex[2]; ///性别
//char sex;
/****************************/
float sum; //总分
float ave; ///平均分
int computer; ///计算机成绩
int english; ///英语成绩
int math; ///数学成绩
int chinese; //语文分数
struct node *next; // 指针域
}list;
/*************************/
void input(list *head) ///输入函数
/*************************/
{
list *p,*r;
int i,n; // n 为学生人数
/*
p=(list *)malloc(sizeof(list));
p—〉next=Null;
*/
r=head;
printf("请输入学生人数。\n”);
scanf(”%d”,&n);
for(i=1;i<=n;i++)
{
p=(list *)malloc(sizeof(list));
printf(”请输入学生学号:\n");
scanf(”%d”,&p-〉num);
printf("请输入学生性别:\n");
scanf("%s",&p—〉sex);
printf("请输入学生姓名:\n");
scanf(”%s",&p-〉name);
printf("请输入语文成绩:\n");
scanf("%d",&p—>chinese);
printf("请输入英语成绩:\n”);
scanf("%d",&p->english);
printf("请输入数学成绩:\n");
scanf(”%d”,&p->math);
printf("请输入计算机成绩:\n");
scanf("%d”,&p->computer);
(p—>sum)=(p-〉chinese)+(p-〉computer)+(p—>math)+(p-〉english);
(p->ave)=(p—〉sum)/4;
p->next=Null;
r—>next=p;
r=r-〉next;
/********************/
count ++;
/********************/
}
}
void output(list *h) //输出函数
{
/************************/
if (h == NULL)
printf(”记录为空!”);
/*************************/
list *p;
printf(”学号\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\t计算机成绩\t平均分\t总成绩\t\n”);
p=h—〉next;
while (p!=NULL)
{
printf(”%d\n\t%s\t%s\t%d\t%d\t%d\t%d\t%5。1f\t%5。1f\n",
p—〉num,p-〉name,p->sex,p—〉chinese,p—〉math,p->english,p-〉computer,p->ave,p-〉sum);
p=p-〉next;
}
}
void sortsum(list *head) ///总成绩排序
{
// struct node temp;
// const int n=20;
// int i,j,k;
// printf(”按照总成绩排序:\t");
// for(i=0;i〈n;i++)
// {
// k=i;
// for(j=i+1;j〈n;j++)
// if(list[j].sum〈list[k].sum)
// k=j;
// temp=list[k];list[k]=list[i];list[i]=temp;
// output(p);
// }
int i=count, j, k;
printf("按照总成绩排序:\n”);
if (count==0 || count==1)
{
return;
}
list *p, *temp;
while(i > 0)
{p=head;
for(j=0; j〈i—1; j++)
{
if(p—>next-〉sum 〉 p->next—>next—〉sum)
{
temp = p-〉next ;
p->next = p-〉next-〉next;
temp-〉next = p—>next—>next;
p—>next—〉next = temp;
}
p = p—>next;
}
i-—;
}
}
/*******************************************/
void sortnum(list *head)
{
int i=count, j, k;
printf(”按照学号排序:\n");
if (count==0 || count==1)
{
return;
}
list *p, *temp;
while(i > 0)
{p=head;
for(j=0; j<i-1; j++)
{
if(p—〉next—>num > p—>next->next—〉num)
{
temp = p—〉next ;
p->next = p—>next—〉next;
temp->next = p—>next—〉next;
p—>next->next = temp;
}
p = p—>next;
}
i-—;
}
}
/*******************************************/
/*
int sortnum(node *list) ///学号排序
{
struct node temp;
const int n=20;
int i,j,k;
printf("按照总成绩排序:\t”);
for(i=0;i〈n;i++)
{
k=i;
for(j=i+1;j〈n;j++)
if(list[j].num〈list[k]。num)
{
k=j;
temp=list[k];
list[k]=list[i];
list[i]=temp;
}
}
return 0;
}
*/
void find (list *h) ///查找函数
{
int k; // 要找的学生学号
list *p;
p=h-〉next;
printf(”请输入要查找的学生学号:\n");
scanf("%d”,&k);
while (p && p—〉num!=k)
p=p—〉next;
if(p)
{
printf("学号\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\t计算机成绩\t平均成绩\t总成绩\n");
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d%5。1f\t%5。1f\n",p—〉num,p—>name,p-〉sex,p->chinese,p-〉math,p->english,p-〉computer,p->ave,p—>sum);
}
else
printf(”目标没找到\n”);
}
list *del (list *h) ///删除函数
{
int k; // 要删除的学生学号
list *p,*q;
q=h;
p=h—〉next;
printf(”请输入待删除的学生学号:\n”);
scanf(”%d",&k);
while (p && p-〉num!=k)
{
q=p;
p=p->next;
}
if(p)
{
q-〉next=p-〉next;
free(p);
count -—;
}
else
printf("没有此学生的记录,无法删除!\n”);
return (h);
}
list *insert(list *h) //插入函数
{
list *p,*q,*r,*head;
head=h;
r=h;
p=h-〉next; // 下面构造一个学生的信息
q=(list *)malloc(sizeof(list));
printf("请输入待插入学生的学号:\n”);
scanf("%d”,&q-〉num);
printf("请输入待插入学生性别:\n");
scanf(”%s",&q—>sex);
printf(”请输入待插入学生的姓名:\n”);
scanf("%s",&q—>name);
printf(”请输入待插入的语文成绩:\n");
scanf(”%d",&q-〉chinese);
printf(”请输入待插入的英语成绩:\n”);
scanf("%d",&q—>english);
printf("请输入待插入的数学成绩:\n”);
scanf(”%d”,&q—〉math);
printf("请输入待插入的计算机成绩:\n");
scanf("%d”,&q—〉computer);
(q—〉sum)=(q—>chinese)+(q-〉computer)+(q-〉math)+(q->english);
(q-〉ave)=(q—〉sum)/4;
q->next=Null; // 找到链表的结尾结点
count ——;
while(p!=Null)
{
r=p;
p=p—>next;
} // 将新结点插入表尾
r—〉next=q;
r=r—>next;
return (head);
}
void main() //主函数
{
list *p;
/*****************************/
p=(list *)malloc(sizeof(list));
p—>next=Null;
/*****************************/
int k; // 控制循环的标志
while (1)
{
printf(" -——-——----———--————-----—--———-—-—-—--—\n”);
printf(” | 学生成绩管理系统 |\n");
printf(” ——-—-—--—---———-———-—---—————-—————--——\n”);
printf(" | 1. 登记成绩 |\n”);
printf(” | 2. 查询成绩 |\n”);
printf(" | 3。 插入成绩 |\n”);
printf(" | 4。 删除成绩 |\n”);
printf(” | 5. 按学号排序 |\n");
printf(" | 6。 按总成绩排序 |\n”);
printf(” | 7。 输出所有学生成绩 |\n");
printf(" | 8. 退出系统 |\n");
printf(" ———-—--—---—--—-----——-—---—--——----—-—\n");
printf(”请输入你的选择\n”);
scanf("%d",&k);
switch(k)
{
case 1:
// p=input();
/****************/
input(p);
/****************/
break;
case 2:find(p);
break;
case 3:p=insert(p);
break;
case 4:p=del(p);
break;
case 5:sortnum(p);
output(p);
break;
case 6:sortsum(p);
output(p);
break;
case 7:output(p);
break;
case 8:exit(0);
default:printf(”选择错误,重新开始\n”);
}
}
}
5实验总结
由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找.在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱.解决的这个问题的办法是调整。一个系统的菜单和提示信息非常重要.如果没有这些用户根本不知道怎么用你设计的这个系统.在设计的调试过程中也无法顺利的完成调试工作.有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。
回顾起此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,提高自己的实际动手能力和独立思考的能力.在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体„„通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我们知道自己哪些方面做得还不够。这不仅是程序设计,更是锻炼我们处理问题的能力,同时也使我们了解到团队合作的可贵.编写程序是件细心活,稍不留神就会出错,这就必须要求我们对待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废. 但我们总结出了一点点的经验如下: 本文为互联网收集,请勿用作商业用途本文为互联网收集,请勿用作商业用途
1、要对系统的功能和要求做出详细的分析,并合理分解任务。 2、把分解出来的子任务,做给一个相对独立的模块。 3、在设计一个模块之前,要简单构想一下总界面的显视情况。 4、针对构想出来的界面进行程序的编写。
展开阅读全文