学生信息管理系统(顺序表)实验1
创作编号:
GB8878185555334563BT9125XW
创作者:凤呜大王*
数据结构课程设计
设计题目:学生信息管理系统(顺序)姓名及学号:
专业班级:09计算机科学与技术
指导教师:
完成时间:
信息工程学院计算机科学系
安徽新华学院课程设计成绩评定表(本科)
目录
一、实验目的 (1)
二、实验内容 (1)
三、基本要求 (1)
四、算法设计思想 (1)
五、算法流程图 (1)
六、算法源代码 (6)
七、运行结果 (22)
八、收获和体会 (25)
九、致谢 (25)
1. 实验目的:
通过制作学生信息管理系统
(1)基本掌握面向过程程序设计的的基本思路和方法;
(2)达到熟练掌握C语言的基本知识和技能;
(3)能够利用所学的基本知识和技能,解决简单的程序设计问题。
2.实验内容:
输入一个班学生的学号,姓名,性别,成绩。编程插入学生信息,设计查找每个学生的信息,删除学生信息,输出学生信息,修改学生信息,报表和显示学生信息,及退出学生信息管理系统。
3.基本要求:
(1)硬件:微机,打印机各一台
(2)软件:Visual C++,windows7
4.算法设计思想
(1).分析程序的功能要求,划分程序功能模块。
(2). 画出系统流程图。
(3). 代码的编写。定义数据结构和各个功能子函数。
(4). 程序的功能调试。
5. 算法的流程图
6. 算法源代码:
#include
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 10
#define List_INIT_SPACE 10 #define List_INC_SPACE 1
typedef struct
{
char number[15];
char name[10];
char sex[10];
int score;
}Elemtype;
typedef struct
{
Elemtype *elem;
int length;
int listsize;
}sqlist;
/*1创建空顺序表并初始化*/
void creatList(sqlist *L)
{
int i=0,n;
Elemtype *newbase;
L->elem=(Elemtype*)malloc(List_INIT_SPACE*(sizeof(Elemty pe)));
if(!L->elem) exit(OVERFLOW);
L->length=0;
L->listsize=List_INIT_SPACE;
printf("有几位同学:\n");
scanf("%d",&n);
for(i=0;i { if(L->length==L->listsize) { newbase=(Elemtype*)realloc(L->elem,(List_INIT_SPACE+List _INC_SPACE)*sizeof(Elemtype)); if(newbase) { L->elem=newbase; L->listsize+=List_INC_SPACE; } else exit(OVERFLOW); } printf("请输入第%d名同学的信息:\n",i+1); printf("学号(15)\n"); scanf("%16s",L->elem[L->length].number); printf("姓名(15)\n"); scanf("%16s",L->elem[L->length].name); printf("性别(男:M女:F)\n"); scanf("%16s",L->elem[L->length].sex); printf("成绩\n"); scanf("%10d",&L->elem[L->length].score); L->length++; } printf("%d名学生信息如下:\n",L->length); printf("学号(15) 姓名(15) 性别(男:M女:F) 成绩\n"); for(i=0;i printf("%-16s%-16s%-16s%-10d\n",L->elem[i].number,L->elem [i].name,L->elem[i].sex,L->elem[i].score); } /*2向顺序表中插入元素*/ void insertlist(sqlist*L) { int i,j,k; char sign='y'; Elemtype *newbase; Elemtype newelem; while(sign!='n') { if(L->length==L->listsize) { newbase=(Elemtype*)realloc(L->elem,(List_INIT_SPACE+List _INC_SPACE)*sizeof(Elemtype)); if(newbase) { L->elem=newbase; L->listsize+=List_INC_SPACE; } else exit(OVERFLOW); } printf("请输入要插入的同学的信息:\n"); printf("学号(15)\n"); scanf("%16s",newelem.number); printf("姓名(15)\n"); scanf("%16s",https://www.360docs.net/doc/394974057.html,); printf("性别(男:M女:F)\n"); scanf("%16s",newelem.sex); printf("成绩\n"); scanf("%10d",&newelem.score); printf("要插入到第几个位置:"); scanf("%d",&i); while(i<1||i>L->length+1) { printf("不能插入到第%d个位置!\n只能插入第1到第%d个位置上!\n请重新输入要插入的位置:",L->length+1); scanf("%d",&i); } L->length++; for(j=L->length-1;j>i-2;j--) { for(k=0;k<16;k++) { L->elem[j].name[k]=L->elem[j-1].name[k]; L->elem[j].number[k]=L->elem[j-1].number[k]; L->elem[j].sex[k]=L->elem[j-1].sex[k]; } L->elem[j].score=L->elem[j-1].score; } j++; for(k=0;k<16;k++) { L->elem[j].name[k]=https://www.360docs.net/doc/394974057.html,[k]; L->elem[j].number[k]=newelem.number[k]; L->elem[j].sex[k]=newelem.sex[k]; } L->elem[j].score=newelem.score; printf("是否还要输入?(Y or N)"); getchar(); scanf("%c",&sign); if(sign=='n'||sign=='N') sign='n'; } printf("%d名学生信息如下:\n",L->length); printf("学号(15) 姓名(15) 性别(男:M女:F) 成绩\n"); for(i=0;i printf("%-16s%-16s%-16s%-10d\n",L->elem[i].number,L->elem [i].name,L->elem[i].sex,L->elem[i].score); } /*3查找学生信息*/ int findlist(sqlist *L) { int j;char i[16]; printf("1.按学号查找\n2.按姓名查找\n请选择:"); scanf("%d",&j); if(j==1) { printf("请输入学号:"); scanf("%s",i); for(j=0;j if(!strcmp(i,L->elem[j].number))//i==L->elem[j].number 用数组函数 return j+1; return 0; } else { printf("请输入姓名:"); scanf("%s",i); for(j=0;j if(!strcmp(i,L->elem[j].name))//用数组函数 return j+1; return 0; } } /*4删除学生信息*/ int delnode(sqlist *L) { int j;char i[10]; printf("1.按学号删除\n2.按姓名删除\n请选择:"); scanf("%d",&j); if(j==1) { printf("请输入学号:"); scanf("%s",i); for(j=0;j if(!strcmp(i,L->elem[j].number))//i==L->elem[j].number 用数组函数 { for(;j L->elem[j]=L->elem[j+1]; L->length--; return 1; } return 0; } else { printf("请输入姓名:"); scanf("%s",i); for(j=0;j if(!strcmp(i,L->elem[j].name))//用数组函数 { for(;j L->elem[j]=L->elem[j+1]; //L->elem[j]以后的向前挪 L->length--; return 1; } return 0; } } /*5输出学生信息*/ void printlist(sqlist *L) { int i; printf("%d名学生信息如下:\n",L->length); printf("学号(15) 姓名(15) 性别(男:M女:F) 成绩\n"); for(i=0;i printf("%-16s%-16s%-16s%-10d\n",L->elem[i].number,L->elem [i].name,L->elem[i].sex,L->elem[i].score); } /*6修改功能*/ void reviselist(sqlist *L) { int i,x,a=0; char name[16]; char sex[16]; char number[16]; int score; printf("请选择你要改的同学的姓名"); scanf("%16s",name); printf("请选择你要改的同学的信息\n"); printf("1.修改学生的姓名\n"); printf("2.修改学生的学号\n"); printf("3.修改学生的性别\n"); printf("4.修改学生的成绩\n"); scanf("%d",&x); switch(x) { case 1: for(i=0;i { if(strcmp(name,L->elem[i].name)==0) { printf("请输入新名字"); scanf("%16s",name); strcpy(L->elem[i].name,name); a=1; } } if(a==0) printf("对不起你要改的名字不存在\n"); break; case 2: for(i=0;i { if(strcmp(name,L->elem[i].name)==0) { printf("请输入新学号"); scanf("%16s",number); strcpy(L->elem[i].number,number); a=1; } } if(a==0) printf("对不起你要改的名字不存在\n"); break; case 3: for(i=0;i { if(strcmp(name,L->elem[i].name)==0) { printf("请输入新性别"); scanf("%16s",sex); strcpy(L->elem[i].sex,sex); a=1; } } if(a==0) printf("对不起你要改的名字不存在\n"); break; case 4: for(i=0;i { if(strcmp(name,L->elem[i].name)==0) { printf("请输入新成绩"); scanf("%d",score); L->elem[i].score=score; a=1; } } if(a==0) printf("对不起你要改的名字不存在\n"); break; } } /*0退出学生信息管理系统*/ void tuichu(sqlist *L) { if(!L->elem) free(L->elem);