实验报告
实验目的:学生管理系统(顺序表)
实验要求:
1.建表
2.求表长
3.插入
4.查找
5.删除
6.列表
7.退出
源程序:
#include
#include
#include
#define MaxSize 1000
typedef struct
{
char xh[40];
char xm[40];
int cj;
}DataType; //学生的结构
typedef struct {
DataType data[MaxSize]; //定义表的数据类型
int length; //数据元素分别放置在data[0]到data[length-1]当中
} SqList; //表的结构
void liebiao(SqList *L) //建立表格
{
int k,n;
char q;
printf("请输入,输入学生的个数:\n");
fflush(stdin);
scanf("%d",&n);
for(k=0;k<=n-1;k++)
{
printf("请输入学生学号\n");
scanf("%s",L->data[k].xh);
printf("请输入学生名字\n");
scanf("%s",L->data[k].xm);
printf("请输入学生成绩\n");
scanf("%d",&L->data[k].cj);
}
L->length=n;
}
void qb(SqList *L) //全部输出
{
int k,w;
for(k=0;klength;k++)
{
w=k+1;
printf("第%d位学生:",w);
printf("%s %s %d\n",L->data[k].xh,L->data[k].xm,L->data[k].cj);
}
}
int cr(SqList *L,DataType *xs,int i) //插入信息
{
int j;
if(L->length==MaxSize)
{
printf("没有!");
return 0;
}
else if((i<0)||(i>L->length))
{
printf("程序溢出,不符合");
return 0;
}
else
{
for(j=L->length-1;j>=i;j--)
{
strcpy(L->data[j+1].xh,L->data[j].xh);
strcpy(L->data[j+1].xm,L->data[j].xm);
L->data[j+1].cj=L->data[j].cj;
}
strcpy(L->data[i].xh,xs->xh);
strcpy(L->data[i].xm,xs->xm);
L->data[i].cj=xs->cj;
L->length=L->length+1;
}
return 0;
}
int cz(SqList *L) //查找信息
{
char xh[40];
char xm[40];
int cj;
int i=0,u;
printf(" 1、按学号查询 \n");
printf(" 1、按姓名查询 \n");
printf(" 1、按成绩查询 \n");
printf("请选择:");
fflush(stdin);
scanf("%d",&u);
if (u==1)
{
printf("请输入要查找学生的学号:");
scanf("%s",xh);
for(i=0;ilength;i++)
{
if(strcmp(L->data[i].xh,xh)==0)
return i;
}
}
if (u==2)
{
printf("请输入要查找学生的姓名:");
scanf("%s",xm);
for(i=0;ilength;i++)
{
if(strcmp(L->data[i].xm,xm)==0)
return i;
}
}
if (u==3)
{
printf("请输入要查找学生的成绩:");
scanf("%s",cj);
for(i=0;ilength;i++)
{
if(L->data[i].cj,&cj)
return i;
}
}
return -1;//*如果没找到,返回-1
}
int cz2(SqList *L) //删除查找的函数
{
char xh[40];
char xm[40];
int i=0,h;
printf(" 1、按 学 号 删除 \n");
printf(" 2、按 姓 名 删除 \n");
printf("请选择:");
fflush(stdin);
scanf("%d",&h);
if (h==1)
{
printf("请输入要删除学生的学号:");
scanf("%s",xh);
for(i=0;ilength;i++)
{
if(strcmp(L->data[i].xh,xh)==0) //判断输入和已知学号一样不
return i;
}
}
else if (h==2)
{
printf("请输入要删除学生的姓名:");
scanf("%s",xm);
for(i=0;ilength;i++)
{
if(strcmp(L->data[i].xm,xm)==0) //判断输入姓名和已知姓名一样不
return i;
}
}
return -1;
}
void sc(SqList *L) //删除函数
{
int i,j;
printf("请先选择您要删除的学生信息的方式:\n");
scanf("%d",&j);
i=cz2(L);
if(i==-1)
{
printf("没有查到要删除的学生信息");
return;
}
for(j=i;jlength;j++) // 要删除学生以后的学生整体上调一位
{
L->data[j].cj=L->data[j+1].cj; //就是后一个覆盖了前一个
strcpy(L->data[j].xh,L->data[j+1].xh);
strcpy(L->data[j].xm,L->data[j+1].xm);
}
L->length--;
printf("该学生信息已被删除!\n");
}
int bc(SqList *L)
{
return (L->length);
}
int main() //主体大函数
{
int i,k;
SqList *L; //定义顺序表的指针
DataType *xs;
L=(SqList *)malloc(sizeof(SqList)*MaxSize);
char q;
ee:
rewind(stdin);
{
printf(" 学生管理系统 \n"); //函数的各个结构
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(" 退出请按0 \n");
printf(" 请输入");
scanf("%c",&q);
}
if(q=='1')
{
rewind(stdin);
liebiao(L);
goto ee;
}
if(q=='2')
{
rewind(stdin);
bc(L);
printf("共%d个学生\n",L->length);
goto ee;
}
if(q=='3')
{
rewind(stdin);
printf(" 插 入 \n");
printf("\t\t 请 输 入 要 添 加 的 学 生 信 息: \n");
xs=(DataType *)malloc(sizeof(DataType));
printf("请输入学生学号\n");
scanf("%s",xs->xh);
printf("请输入学生名字\n");
scanf("%s",xs->xm);
printf("请输入学生成绩\n");
scanf("%d",&xs->cj);
printf("请输入要插入的位置:\n");
rewind(stdin);
scanf("%d",&i);
cr(L,xs,i);
goto ee;
}
if(q=='4'){rewind(stdin);
printf(" 查 找 \n");
printf(" 查 询 学 生 信 息 \n");
i=cz(L);
if(i!=-1)
{
printf("%s %s %d\n",L->data[i].xh,L->data[i].xm,L->data[i].cj);
}
else
{
printf("信息不存");
}
goto ee;
}
if(q=='5'){
rewind(stdin);
printf(" 删 除 \n");
printf(" 删 除 学 生 信 息 \n");
sc(L);
goto ee;
}
if(q=='6')
{rewind(stdin);
printf(" 列表 \n");
qb(L);
goto ee;
}
if(q=='0') {printf("谢谢使用\n");
}
if(!(q=='1'||q=='2'||q=='3'||q=='4'||q=='5'||q=='5'||q=='0'))
{
goto ee;
}
system ("pause");
return 0;
}
主程序:
建表:
查找:
插入:
删除:
列表:
实验目的:学生管理系统(链表)
实验要求:1.建表
2.删除
3.列表
4.退出
源程序:
#include
#include
#include
struct xuesheng
{
char xh[7];
char xm[40];
int cj;
struct xuesheng *next;
};
struct xuesheng *cha_ru(struct xuesheng *x)
{
struct xuesheng *p,*q;
int c;
do
{
if(x==0){ x=(struct xuesheng *)malloc(sizeof(struct xuesheng));
printf("input xh:"); scanf("%s",(*x).xh);
printf("input xm:"); scanf("%s",(*x).xm);
printf("input cj:"); scanf("%d",&(*x).cj);
(*x).next=0; }
else{ p=x;
while((*p).next!=0){p=(*p).next;};
q=(struct xuesheng *)malloc(sizeof(struct xuesheng));
printf("input xh:"); scanf("%s",(*q).xh);
printf("input xm:"); scanf("%s",(*q).xm);
printf("input cj:"); scanf("%d",&(*q).cj);
(*p).next=q;
(*q).next=0; }
printf("ni hai ji xu me? 1/2:");
scanf("%d",&c);
}
while(c==1);
return(x);
}
int link_len(struct xuesheng *x)
{
struct xuesheng *p;
int l=0;
p=x;
if(p!=0)do{
l=l+1;
p=p->next;
}
while(p!=0);
return(l);
}
struct xuesheng *shan_chu(struct xuesheng *x)
{
struct xuesheng *p,*q,*t;
int k,l,i;
p=x;
q=x;
l=link_len(x);
printf("input shan chu jie dian xu hao :");
scanf("%d",&k);
if(k<=0||k>l)printf("error data!\n");
if(k==1){ x=p->next;
t=p;
free(t);}
if(k>1&&k<=l){ for(i=1;i<=k-2;i=i+1)p=p->next;
t=p->next;
for(i=1;i<=k;i=i+1)q=q->next;
p->next=q;
free(t); }
printf("vvvvvvv shan chu wan bi ! vvvvvvv\n");
return(x);
}
void lie_biao(struct xuesheng *x)
{
struct xuesheng *p;
int l;
p=x;
if(p==0) printf("gai biao wei kong!\n");
else do{
printf("%20s% 20s%7d\n",(*p).xh,(*p).xm,(*p).cj);
p=(*p).next;
}
while(p!=0);
l=link_len(x);
printf(" l=%d\n",l);
}
main()
{
struct xuesheng *s_head;
int n;
s_head=0;
do
{
printf("1:cha ru\n");
printf("2:cha zhao\n");
printf("3:shan chu\n");
printf("4:lie biao\n");
printf("5:tui chu\n");
printf("input 1---5:");
scanf("%d",&n);
switch(n)
{
case 1: s_head=cha_ru(s_head);break;
/* case 2: cha_zhao(s_head);break;*/
case 3: s_head=shan_chu(s_head);break;
case 4: lie_biao(s_head);break;
}
}
while(n==1||n==3||n==4);
printf("\n");
return 0;
}
框图:
主函数:
建表:
删除:
总结:顺序表存储位置是相邻连续的,可以随即访问的一种数据结构,一个顺序表在使用前必须指定起长度,一旦分配内存,则在使用中不可以动态的更改。他的优点是访问数据是比较方便,可以随即的访问表中的任何一个数据,缺点是定义的长度不可更改造成存储空间的浪费。
链表是通过指针来描述元素关系的一种数据结构,他可以是物理地址不连续的物理空间。不能随即访问链表元素,必须从表头开始,一步一步搜索元素。它的优点是:对于数组,可以动态的改变数据的长度,分配物理空间。
建议:在使用中如果一个数组在使用中,查询比较多,而插入,删除数据比较少,数组的长度不变时,选顺序表比较合理。如果插入,删除,长度不定的数组,可以选链表。
20XX20XX学年第一学期合肥学院数理系实验报告课程名称:数据结构实验项目:顺序表的基本运算实验类别:综合性□设计性□验证性□专…
实验报告附源程序includeltstdiohgtdefineMaxsize100defineerror0defineok1typ…
lt数据结构Cgt实验报告江西理工大学软件学院数据结构C课程设计报告20xx20xx学年第一学期课程名称数据结构C设计题目顺序表的…
实验1顺序表的操作一12345678实验要求输入一组整型元素序列建立顺序表实现该顺序表的遍历在该顺序表中进行顺序查找某一元素查找成…
顺序表的基本操作一实验目的1复习C语言程序设计中的知识2熟悉线性表的逻辑结构3熟悉线性表的基本运算在两种存储结构上的实现4掌握顺序…
太原理工大学现代科技学院计算机软件技术基础课程实验报告专业班级学号姓名指导教师太原理工大学现代科技学院实验报告装订线实验名称顺序表…
肇庆学院计算机学院软件学院实验报告专业计算机科学与技术班级科技1班姓名付治齐学号20xx24131151课程名称数据结构学年学期1…
太原理工大学现代科技学院计算机软件技术基础课程实验报告专业班级学号姓名指导教师实验名称线形顺序表的插入与删除同组人专业班级学号姓名…
C语言实验顺序结构实验报告程序代码顺序结构第一题includeltstdiohgtincludeltconiohgtmainflo…
20XX20XX学年第一学期合肥学院数理系实验报告课程名称:数据结构实验项目:顺序表的基本运算实验类别:综合性□设计性□验证性□专…
单链表实验报告实验一线性表基本操作的编程实现--线性表在链表存储下的主要操作实现一、需求分析【实验目的】通过本次实验,对课堂上线性…