资源描述
实验报告
实验目的:学生管理系统(顺序表)
实验要求:
1.建表
2.求表长
3.插入
4.查找
5.删除
6.列表
7.退出
源程序:
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
#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;k<L->length;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;i<L->length;i++)
{
if(strcmp(L->data[i].xh,xh)==0)
return i;
}
}
if (u==2)
{
printf("请输入要查找学生的姓名:");
scanf("%s",xm);
for(i=0;i<L->length;i++)
{
if(strcmp(L->data[i].xm,xm)==0)
return i;
}
}
if (u==3)
{
printf("请输入要查找学生的成绩:");
scanf("%s",cj);
for(i=0;i<L->length;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;i<L->length;i++)
{
if(strcmp(L->data[i].xh,xh)==0) //判断输入和已知学号一样不
return i;
}
}
else if (h==2)
{
printf("请输入要删除学生的姓名:");
scanf("%s",xm);
for(i=0;i<L->length;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;j<L->length;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--6
主程序:
建表
n=1
求表长
n=2
插入
n=3
查找
n=4
删除
n=5
列表
n=6
退出
输入学生个数n, 变量k
建表:
k=0;
k<=n-1;
是 否
输入学号,姓名,成绩
k=k+1
结束
输入查找学号n,变量k
查找:
k=0
n=k
是 否
k=k+1
输出
输入插入位置n表长L变量k
插入:
输入错误
n<=L
是 否
k=0
n=k
是
否
k=k+1
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
结束
输入删除的位置n变量k表长L
删除:
输入错误
n<=L
是 否
k=0
n=k
否 是
k=k+1
strcpy(L->data[j].xh,L->data[j-1].xh);
strcpy(L->data[j].xm,L->data[j-1].xm);
L->data[j].cj=L->data[j-1].cj
结束
输入表长L变量k
列表:
k<=L
是 否
输出学号,姓名,成绩
k=k+1
结束
实验目的:学生管理系统(链表)
实验要求:1.建表
2.删除
3.列表
4.退出
源程序:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
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;
}
框图:
输入n(1---4)
主函数:
1.建表
n=1
输入错误
4.退出
3.列表
n=3
n=2
2.删除
是
否
是
否
是 否
否
p.next=q
q.next=0
p=p.next
p->=0
输入学号,姓名,成绩
建表:
结束
是否继续
否 是
是
否
定义表长L,k,i
删除:
此表为空
k>0
否
k=1
是
是 否
输入错误
x=p->next;
t=p;
free(t);
L<=k
否
i=1;
i<=k-2;
是
是 否
i<=k
p=p->next;
t=p->next;
否
free(t);
q=q->next;
p->next=q;
=1
i=i+1;
i=i+1;
结束
总结:顺序表存储位置是相邻连续的,可以随即访问的一种数据结构,一个顺序表在使用前必须指定起长度,一旦分配内存,则在使用中不可以动态的更改。他的优点是访问数据是比较方便,可以随即的访问表中的任何一个数据,缺点是定义的长度不可更改造成存储空间的浪费。
链表是通过指针来描述元素关系的一种数据结构,他可以是物理地址不连续的物理空间。不能随即访问链表元素,必须从表头开始,一步一步搜索元素。它的优点是:对于数组,可以动态的改变数据的长度,分配物理空间。
建议:在使用中如果一个数组在使用中,查询比较多,而插入,删除数据比较少,数组的长度不变时,选顺序表比较合理。如果插入,删除,长度不定的数组,可以选链表。
书是我们时代的生命——别林斯基
书籍是巨大的力量——列宁
书是人类进步的阶梯———高尔基
书籍是人类知识的总统——莎士比亚
书籍是人类思想的宝库——乌申斯基
书籍——举世之宝——梭罗
好的书籍是最贵重的珍宝——别林斯基
书是唯一不死的东西——丘特
书籍使人们成为宇宙的主人——巴甫连柯
书中横卧着整个过去的灵魂——卡莱尔
人的影响短暂而微弱,书的影响则广泛而深远——普希金
人离开了书,如同离开空气一样不能生活——科洛廖夫
书不仅是生活,而且是现在、过去和未来文化生活的源泉 ——库法耶夫
书籍把我们引入最美好的社会,使我们认识各个时代的伟大智者———史美尔斯
书籍便是这种改造灵魂的工具。人类所需要的,是富有启发性的养料。而阅读,则正是这种养料———雨果
展开阅读全文