C语言学生信息管理系统.docx

上传人:b****5 文档编号:7824176 上传时间:2023-01-26 格式:DOCX 页数:17 大小:17.61KB
下载 相关 举报
C语言学生信息管理系统.docx_第1页
第1页 / 共17页
C语言学生信息管理系统.docx_第2页
第2页 / 共17页
C语言学生信息管理系统.docx_第3页
第3页 / 共17页
C语言学生信息管理系统.docx_第4页
第4页 / 共17页
C语言学生信息管理系统.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C语言学生信息管理系统.docx

《C语言学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言学生信息管理系统.docx(17页珍藏版)》请在冰豆网上搜索。

C语言学生信息管理系统.docx

C语言学生信息管理系统

#include

#include

#include

#include

#include

structstudent//存储学生信息的结构体

{

charname[10];

intnum;

charsex[5];

charsubject[10];

intscore;

}stud[10];

inta[10],b[10],c[10],d[10],m,stustuSIZE,searchscore;//a[],b[]为辅助数组

structstudentHS[60],HS1[60];//HS1[60]为溢出表

structtree//树的结构体

{

structtree*left;

intdata;

structtree*right;

};

typedefstructtreetreenode;

typedeftreenode*btree;

structs_node//栈的结构体

{

btreedate;

structs_node*next;

};

typedefstructs_nodes_list;

typedefs_list*link;

btreef,root,q;

linkS;

linkcreat(linkstack)//创建空栈的函数

{

stack=(link)malloc(sizeof(s_list));

if(!

stack)

{

printf("\nERROR");

returnNULL;

}

returnstack;

}

linkpush(linkstack,btreevalue)//添加新的元素value为stack的栈顶元素

{

linknewnode;

newnode=(link)malloc(sizeof(s_list));

if(!

newnode)

{

printf("\nERROR");

returnNULL;

}

newnode->date=value;

newnode->next=stack;

stack=newnode;

returnstack;

}

linkpop(linkstack)//栈顶出栈的函数,c表示出栈的栈顶元素

{

linktop;

if(stack!

=NULL)

{

top=stack;

stack=stack->next;

f=top->date;

free(top);

q=stack->date;

returnstack;

}

else

f=NULL;

}

btreeinsert(btreeroot,intnode)//插入树中间的节点

{

btreenewnode;

btreecurnode;

btreeparnode;

newnode=(btree)malloc(sizeof(structtree));

newnode->data=node;

newnode->left=NULL;

newnode->right=NULL;

if(root==NULL)//根节点,直接返回

returnnewnode;

else

{

curnode=root;

while(curnode!

=NULL)

{

parnode=curnode;

if(curnode->data>node)

curnode=curnode->left;

else

curnode=curnode->right;

}

if(parnode->data>node)

parnode->left=newnode;

else

parnode->right=newnode;

}

returnroot;

}

btreetreecreat(intlen)//创建树的函数

{

btreeroot=NULL;

inti;

for(i=0;i

root=insert(root,d[i]);

returnroot;

}

voidtrav(btreep)//遍历树的函数

{

inti;

intj=0;

S=push(S,p);

q=S->date;

do

{

while(S->date!

=0)

{

S=push(S,q->left);

q=q->left;

}

S=pop(S);

if

(1)

{

S=pop(S);

if(f->data==searchscore)

{

for(i=0;i<=stustuSIZE;i++)

{

if(stud[i].score==searchscore)

{

printf("姓名:

%s学号:

%d性别:

%s科目:

%s成绩:

%d\n",stud[i].name,stud[i].num,stud[i].sex,stud[i].subject,stud[i].score);

return;

}

}

}

printf("%d",f->data);

j++;

S=push(S,f->right);

q=S->date;

}

}

while(j

}

voidsort()//采用冒泡排序的方法对学号进行排序

{

inti,j,t,m;

for(i=0;i<=stustuSIZE;i++)

{

if(stud[i].num!

=0)

a[i]=stud[i].num;

}

m=i-1;

for(j=0;j

for(i=0;i

if(a[i]>a[i+1])

{

t=a[i];

a[i]=a[i+1];

a[i+1]=t;

}//a[0]到a[m]排序完毕

}

intBsearch(intsearchnum)//通过折半查找,查找学生学号

{

intlow,high,mid;

inti,j;

for(i=0,j=1;i<=stustuSIZE;i++,j++)

c[j]=a[i];

low=1;

high=j-1;

while(low<=high)

{

mid=floor((low+high)/2);

if(c[mid]==searchnum)

returnmid;

elseif(searchnum

high=mid-1;

else

low=mid+1;

}

return0;

}

voidHash()//建立HS表的函数

{

intk,i;

for(i=0;i<=stustuSIZE;i++)

{

if(stud[i].num!

=0)//学号为0表示已经删除

{

k=(stud[i].name[0]-96)+(stud[i].name[1]-96);//HS函数

if(HS[k].name==0)

{

strcpy(HS[k].name,stud[i].name);

HS[k].num=stud[i].num;

strcpy(HS[k].sex,stud[i].sex);

strcpy(HS[k].subject,stud[i].subject);

HS[k].score=stud[i].score;

}

else

{

strcpy(HS[k].name,stud[i].name);//用HS1[]当作溢出表,处理冲突

HS[k].num=stud[i].num;

strcpy(HS[k].sex,stud[i].sex);

strcpy(HS[k].subject,stud[i].subject);

HS[k].score=stud[i].score;

}

}

}

}

intmaxscore()//搜索分数最高的学生,返回值为其在结构体数组中的序号

{

inti=0,n,j;

n=b[i];//m记录当前的最高分数

j=i;//j记录最高分数项的序号

for(i=1;i<=stustuSIZE;i++)

{

if(n

{

n=b[i];

j=i;

}

}

b[j]=0;//找到分数最高项后,将最高分数项的分数置0,以便不影响下次的寻找

returnj;

}

intmain()

{

intserve,i,u,v,w,t=0,n,r;

intflag=0;//flag记录学生信息是否已经输入过

intflag1=0;

intsearch,searchnum,j;

charnamesearch[10];

while(flag!

=2)

{

printf("-----------------------------学生信息管理系统--------------------------------\n\n\n");

printf("表单排序选项\n\n");

printf("【1】学生信息输入\n");

printf("【2】学生信息浏览\n");

printf("【3】学生信息查询\n");

printf("【4】学生成绩区间段查询和统计\n");

printf("【5】学生成绩排序\n");

printf("【6】学生信息修改\n");

printf("【7】学生信息增加\n");

printf("【8】学生信息删除\n");

printf("【9】结束\n");

printf("-------------------------------------------------------------------------\n\n");

printf("请选择您要进入的功能:

");

scanf("%d",&serve);

switch(serve)

{

case1:

{

system("cls");

printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");

printf("请输入学生的个数:

");

scanf("%d",&i);

stustuSIZE=i-1;

printf("请按姓名,学号,性别(m||w),选课科目,成绩的顺序输入信息,以空格隔开\n");

for(i=0;i<=stustuSIZE;i++)

{

scanf("%s%d%s%s%d",stud[i].name,&stud[i].num,stud[i].sex,stud[i].subject,&stud[i].score);

if(stud[i].score<0||stud[i].score>100||stud[i].sex[0]!

='m'&&stud[i].sex[0]!

='w')

{

printf("输入数据不合法!

请重新输入.\n");

scanf("%s%d%s%s%d",stud[i].name,&stud[i].num,stud[i].sex,stud[i].subject,&stud[i].score);

}

};

flag=1;

system("cls");

break;

}

case2:

{

if(flag==0)

{

printf("还没有输入信息,无法浏览\n");

break;

}

system("cls");

printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");

for(i=0;i<=stustuSIZE;i++)

{

if(stud[i].num!

=0)//学号为0表示该生信息已经被删除

printf("姓名:

%s学号:

%d性别:

%s科目:

%s成绩:

%d\n",stud[i].name,stud[i].num,stud[i].sex,stud[i].subject,stud[i].score);

}

system("pause");

system("cls");

break;

}

case3:

{

while(flag==0)

{

printf("还没有输入信息,无法浏览\n");

break;

}

system("cls");

printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");

printf("请输入查询信息的方式:

\n");

printf("【1】按学号查询\n");

printf("【2】按姓名查询\n");

printf("【3】按成绩查询\n");

printf("");

scanf("%d",&search);

if(search==1)

{

printf("请输入学生的学号:

");

scanf("%d",&searchnum);

sort();

j=Bsearch(searchnum);

for(i=0;i<=stustuSIZE;i++)

{

if(stud[i].num==c[j])

break;

}

printf("该生信息如下:

\n");

printf("姓名:

%s学号:

%d性别:

%s科目:

%s成绩:

%d\n",stud[i].name,stud[i].num,stud[i].sex,stud[i].subject,stud[i].score);

system("pause");

system("cls");

break;

}

elseif(search==2)

{

Hash();

printf("请输入学生的姓名:

\n");

scanf("%s",namesearch);

r=(namesearch[0]-96)+(namesearch[1]-96);

if(strcmp(namesearch,HS[r].name)==0)

{

printf("该生信息如下:

\n");

printf("姓名:

%s学号:

%d性别:

%s科目:

%s成绩:

%d\n",HS[r].name,HS[r].num,HS[r].sex,HS[r].subject,HS[r].score);

system("pause");

system("cls");

break;

}

elseif(strcmp(namesearch,HS1[r].name)==0)

{

printf("该生信息如下:

\n");

printf("姓名:

%s学号:

%d性别:

%s科目:

%s成绩:

%d\n",HS1[r].name,HS1[r].num,HS1[r].sex,HS1[r].subject,HS1[r].score);

system("pause");

system("cls");

break;

}

else

{

printf("找不到该生信息!

\n");

system("pause");

system("cls");

break;

}

}

else

{

for(i=0;i<=stustuSIZE;i++)

{

if(stud[i].num!

=0)

d[i]=stud[i].score;

}

printf("请输入要查询的成绩:

\n");

scanf("%d",&searchscore);

S=creat(S);

S->date=NULL;

root=treecreat(i);

trav(root);

system("pause");

system("cls");

break;

}

}

case4:

{

while(flag==0)

{

printf("还没有输入信息,无法浏览\n");

break;

}

system("cls");

printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");

printf("请输入要统计区间的下限:

");

scanf("%d",&m);

printf("请输入要统计区间的上限:

");

scanf("%d",&n);

for(i=0;i<=stustuSIZE;i++)

{

if((stud[i].score>=m)&&(stud[i].score<=n))

{

printf("姓名:

%s学号:

%d性别:

%s科目:

%s成绩:

%d\n",stud[i].name,stud[i].num,stud[i].sex,stud[i].subject,stud[i].score);

t++;

}

}

printf("该区间段学生的个数为%d\n",t);

system("pause");

system("cls");

break;

}

case5:

{

while(flag==0)

{

printf("还没有输入信息,无法浏览\n");

break;

}

system("cls");

printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");

for(i=0;i<=stustuSIZE;i++)

{

if(stud[i].num!

=0)

b[i]=stud[i].score;

}

for(i=0;i<=stustuSIZE;i++)

{

u=maxscore();

printf("姓名:

%s分数:

%d\n",stud[u].name,stud[u].score);

}

system("pause");

system("cls");

break;

}

case6:

{

while(flag==0)

{

printf("还没有输入信息,无法浏览\n");

break;

}

system("cls");

printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");

printf("请输入要修改信息的学生的学号:

");

scanf("%d",&v);

for(i=0;i<=stustuSIZE;i++)

{

if(flag1==2)

break;

while(stud[i].num==v)

{

printf("该生当前信息如下:

\n");

printf("姓名:

%s学号:

%d性别:

%s科目:

%s成绩:

%d\n",stud[i].name,stud[i].num,stud[i].sex,stud[i].subject,stud[i].score);

printf("请按姓名,学号,性别(m||w),选课科目,成绩的顺序输入新的信息:

\n");

scanf("%s%d%s%s%d",stud[i].name,&stud[i].num,stud[i].sex,stud[i].subject,&stud[i].score);

flag1=2;

break;

}

}

system("pause");

system("cls");

break;

}

case7:

{

while(flag==0)

{

printf("还没有输入信息,无法浏览\n");

break;

}

system("cls");

printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");

i=stustuSIZE+1;

printf("请输入该生的信息:

\n");

scanf("%s%d%s%s%d",stud[i].name,&stud[i].num,stud[i].sex,stud[i].subject,&stud[i].score);

stustuSIZE++;

system("pause");

system("cls");

break;

}

case8:

{

while(flag==0)

{

printf("还没有输入信息,无法浏览\n");

break;

}

system("cls");

printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");

printf("请输入要删除信息的学生的学号:

");

scanf("%d",&w);

for(i=0;i<=stustuSIZE;i++)

{

if(stud[i].num==w)

stud[i].num=0;//学号置0表示该项被删除

}

system("pause");

system("cls");

break;

}

case9:

{

flag=2;

break;

}

default:

{

printf("输入数字错误!

\n");

system("pause");

system("cls");

break;

}

}

}

system("cls");

printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");

printf("\n\n\n\n谢谢使用!

\n\n\n\n\n");

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1