数据结构课程设计
题目:线性表---学生成绩管理
一、课程设计内容
设计一个学生成绩管理程序(如上图所示),它具有下列功能:
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
#include
#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;ilength==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;ilength;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;ilength;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. 学生记录查找功能(按值查找); [测试:实现按性别查找的功能,输出所有女生的记录]