您的位置:首页 > 理论基础 > 数据结构算法

线性表---学生成绩管理--数据结构课程设计

2012-12-29 22:53 696 查看
数据结构课程设计
题目:线性表---学生成绩管理

一、课程设计内容





设计一个学生成绩管理程序(如上图所示),它具有下列功能:

1. 初始化功能;void Initial( List *lst )
2. 建表功能;void CreateList(
List *lst,int maxsize )
3. 学生成绩记录录入功能;BOOL Append
( List *lst , T x )
4. 学生成绩记录显示功能;void Show(List lst)
5. 学生成绩记录插入功能;BOOL Insert(
List *lst , int pos, T x )
6. 学生成绩记录删除功能;BOOL Remove(
List *lst, int pos, T *x)
7. 修改记录功能;BOOL Replace(
List *lst, int pos, T x)
8. 学生记录查找功能(按序号查找);void
Find(List *lst,int pos)
9. 学生记录查找功能(按值查找);void
Locate(List *lst,T x)
程序包括简单的错误检查功能。
二、课程设计要求
(一)要求完成如下数据测试,每个部分要求给出测试截屏

1. 学生成绩记录录入功能; [测试:录入成绩表中的第2条林悦和第4条张可可的记录]
2. 学生成绩记录显示功能; [测试:显示数据表中的全部记录]
3. 学生成绩记录插入功能; [测试:在第2条记录后面插入陈菁菁的记录,并显示]
4. 录入王小红的记录; [测试:录入后显示录入后状态]
5. 录入自己名字命名的记录;[测试:录入后显示录入后状态]
6. 显示已经录入的所有记录;
7. 学生成绩记录删除功能; [测试:删除张可可的记录并显示删除后状态]
8. 修改记录功能; [测试:将林悦的成绩改为92分,并显示修改之前和修改后的记录]
9. 学生记录查找功能(按序号查找);[测试:实现按序号查找的功能,输入3显示第一条记录]
10. 学生记录查找功能(按值查找); [测试:实现按性别查找的功能,输出所有女生的记录]
(二)将课程设计的全部代码存入电子实验报告单
三、测试数据举例:









《数据结构》课程设计
题目:线性表---学生成绩管理
学生姓名: 班级: 学号:

一、 课程设计代码
#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

typedef int BOOL;
typedef struct T{
char cNum[20];
char cName[20];
char cSex[3];
float fScore;
}T;
typedef struct List{
T   *data;
int length;
int listsize;
}List;

void Initial( List *lst );
void CreateList( List *lst,int maxsize );
BOOL  Append ( List  *lst , T  x );
void Show(List  lst);
BOOL  Insert( List  *lst , int  pos, T  x );
BOOL  Remove( List  *lst, int  pos, T *x);
BOOL  Replace( List  *lst, int pos, T  x);
void Find(List *lst,int pos);
void Locate(List *lst,T  x);
int ShowMenu();
void InputT(T *ret);

int main()
{
List lst;
T tmp;
int pos,select;
char cAppend;
Initial(&lst);
do{
select=ShowMenu();
switch(select){
case 1:
cAppend='y';
do{
if(cAppend=='y'){
InputT(&tmp);
Append(&lst,tmp);
}
if(cAppend!='\n')printf("是否继续?(y/n)");
scanf("%c",&cAppend);
}while(cAppend!='n');
break;
case 2:
Show(lst);
break;
case 3:
printf("您要在哪个位置插入记录:");scanf("%d",&pos);
InputT(&tmp);
Insert(&lst,pos,tmp);
break;
case 4:
printf("您要删除哪个记录:");scanf("%d",&pos);
Remove(&lst,pos,&tmp);
break;
case 5:
printf("您要修改哪个记录:");scanf("%d",&pos);
InputT(&tmp);
Replace(&lst,pos,tmp);
break;
case 6:
printf("您要在查找哪个记录:");scanf("%d",&pos);
Find(&lst,pos);
break;
case 7:
printf("(输入“.”/-1表示不确定)");
InputT(&tmp);
Locate(&lst,tmp);
break;
}
}while(select!=0);
return 0;
}

int ShowMenu(){
int ret=0;
do{
printf("请输入功能代码:\n");
printf("1-追加  2-显示  3-插入  4-删除  5-修改  6-查找(按序号)  7-查找(按值)  0-退出\n");
scanf("%d",&ret);
}while( ret<0 && ret>7 );
return ret;
}

void InputT(T *ret){
printf("请输入学生信息:\n");
printf("学号:");  scanf("%s",ret->cNum);
printf("姓名:");  scanf("%s",ret->cName);
printf("性别:");  scanf("%s",ret->cSex);
printf("分数:");  scanf("%f",&ret->fScore);
printf("输入完成\n");
}

void Initial( List *lst ){
CreateList(lst,100);
}

void CreateList( List *lst,int maxsize ){
lst->data=(T*)malloc(maxsize * sizeof(T));
if(lst->data==NULL){
printf("申请内存空间失败\n");
system("pause");
exit(0);
}
lst->length=0;
lst->listsize=maxsize;
return;
}
BOOL  Append ( List  *lst , T  x ){
if(lst->length==lst->listsize){
printf("达到链表最大值\n");
system("pause");
exit(0);
return FALSE;
}
lst->data[lst->length]=x;
(lst->length)++;
return TRUE;
}

void Show(List lst){
int i;
printf("显示信息:\n");
for(i=0;i<lst.length;i++){
printf("_________________________________________________________\n");
printf("%-14s%-10s%-5s%-10f\n",lst.data[i].cNum,lst.data[i].cName,lst.data[i].cSex,lst.data[i].fScore);
}
printf("\n");
return;
}

BOOL  Insert( List  *lst , int  pos, T  x ){
int i;
if(lst->length==lst->listsize){
printf("达到链表最大值\n");
system("pause");
exit(0);
return FALSE;
}
if(pos<0||pos>lst->length){
printf("位置输入错误\n");
return FALSE;
}
for(i=lst->length-1;i>=pos;i--){
lst->data[i+1]=lst->data[i];
}
lst->data[pos]=x;
(lst->length)++;
return TRUE;
}

BOOL  Remove( List  *lst, int  pos, T *x){
int i;
*x=lst->data[pos];
if(pos<0||pos>=lst->length){
printf("位置输入错误\n");
return FALSE;
}
for(i=pos+1;i<lst->length;i++){
lst->data[i-1]=lst->data[i];
}
(lst->length)--;
return TRUE;
}

BOOL  Replace( List  *lst, int pos, T  x){
if(pos<0||pos>=lst->length){
printf("位置输入错误\n");
return FALSE;
}
lst->data[pos]=x;
return TRUE;
}

void Find(List *lst,int pos){
if(pos<0||pos>=lst->length){
printf("位置输入错误\n");
}
printf("查询结果:\n");
printf("_________________________________________________________\n");
printf("%-14s%-10s%-5s%-10f\n",lst->data[pos].cNum,lst->data[pos].cName,lst->data[pos].cSex,lst->data[pos].fScore);
return;
}
void Locate(List *lst,T  x){
int i;
printf("查询结果:\n");
for(i=0;i<lst->length;i++){
if(  (x.cNum[0] !='.' && strcmp(lst->data[i].cNum  , x.cNum  )==0 )
||(x.cName[0]!='.' && strcmp(lst->data[i].cName , x.cName )==0 )
||(x.cSex[0] !='.' && strcmp(lst->data[i].cSex  , x.cSex  )==0 )
||(x.fScore>=0 && lst->data[i].fScore == x.fScore ) ){
printf("_________________________________________________________\n");
printf("%-14s%-10s%-5s%-10f\n",lst->data[i].cNum,lst->data[i].cName,lst->data[i].cSex,lst->data[i].fScore);
}
}
return;
}


二、 课程设计测试截屏

1. 学生成绩记录录入功能; [测试:录入成绩表中的第2条林悦和第4条张可可的记录]






2. 学生成绩记录显示功能; [测试:显示数据表中的全部记录]



3. 学生成绩记录插入功能; [测试:在第2条记录后面插入陈菁菁的记录,并显示]



4. 录入王小红的记录; [测试:录入后显示录入后状态]



5. 录入自己名字命名的记录;[测试:录入后显示录入后状态]



6. 显示已经录入的所有记录;



7. 学生成绩记录删除功能; [测试:删除张可可的记录并显示删除后状态]



8. 修改记录功能; [测试:将林悦的成绩改为92分,并显示修改之前和修改后的记录]



9. 学生记录查找功能(按序号查找);[测试:实现按序号查找的功能,输入3显示第一条记录]



10. 学生记录查找功能(按值查找); [测试:实现按性别查找的功能,输出所有女生的记录]

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: