完成一个小型学生信息管理系统,要求分别用函数实现以下功能:
- 输入10个学生的姓名和学号;
- 按学号由小到大顺序排序,姓名顺序也随之调整,并分行输出排好序的学号和姓名;
- 输入一个学号,用折半查找法找出该学号的学生姓名,在主函数输入要查找的学号,并输出该学生姓名;
- 用主函数分别调用以上函数。
让我考虑考虑肿木写
然后我做了个小小界面:
详情模块见下:
1、输入10个学生的姓名和学号:
效果:
代码:
void Shuru() //输入函数
{
int i;
printf("请输入10个学生的姓名和学号(中间空格):\n");
for(i=0;i<10;i++) // 使用for语句经行多次输入
{
scanf("%s %lld",&student[i].name,&student[i].num);
}
printf("\n");
}
2、按学号由小到大顺序排序,姓名顺序也随之调整,并分行输出排好序的学号和姓名:
效果:
代码:
void Paixu() //排序函数(按要求我选择冒泡法排序)
{
int i,j;
printf("排完的顺序为:\n");
for(i=0;i<9;i++)
for(j=0;j<9-i;j++) //按学号对学生信息经行排序
{
if(student[j].num > student[j+1].num) //整型数字的比较
{
student1=student[j];
student[j]=student[j+1];
student[j+1]=student1;
}
}
for(i=0;i<10;i++) // 使用for语句经行多次输出
printf("%lld %s\n",student[i].num,student[i].name);
printf("\n");
}
3、 输入一个学号,用折半查找法找出该学号的学生姓名,在主函数输入要查找的学号,并输出该 学生姓名:
效果:(分为找到和找不到,我就随便输入了一个(没找到)就不演示找到了)
代码:
void Chazhao() //查找函数(还是按照要求用的是折半法查找)
{
int top,bot,find,mid,i;
find=0;top=0;bot=9;
while(top<=bot && find==0)
{
mid=(top+bot)/2; //找到位于中间的学号
if(num == student[mid].num)
find=1; //如果在中间就直接找到
else if(num < student[mid].num)
bot=mid-1; //如果不在中间就向前一个寻找或后一个寻找
else top=mid+1;
}
if(find==0)
printf("%ld 输入有误或没有该名学生\n",num);
else
i=mid; //将找到的位置赋值给i
printf("查询的这位学生姓名为:%s\n",student[i].name);
printf("\n");
}
4、用主函数分别调用以上函数:
效果见上:(懒得再发)
直接献上代码:
#include<stdio.h>
//定义函数
void Shuru();
void Paixu();
void Chazhao();
long long num; //我是按照我们学号的长度(11位)超过long(长整型),我使用
//Dev-C++ 。经查验VC++ 6.0未有录入long long(双长型)
struct students //函数体
{
long long num; //用双长型定义学号
char name[20]; //用字符型定义姓名数组
}student[10],student1; //student[10]是结构体数组 ,student1 时结构体初始化
int main()
{
printf("********************\n");
printf("*本程序所含一下项目*\n");
printf("********************\n");
printf("***** 菜单 *****\n");
printf("***** 1.输入 *****\n");
printf("***** 2.排序 *****\n");
printf("***** 3.查找 *****\n");
printf("********************\n");
printf("\n");
//主函数调用子函数
Shuru();
Paixu();
Printf(“请输入要查询的学号:”);
scanf(“%lld”,&num);
Chazhao();
return 0;
}
好了思路解决接下来进入重点(直接献上全部代码)
#include<stdio.h>
//定义函数
void Shuru();
void Paixu();
void Chazhao();
long long num; //我是按照我们学号的长度(11位)超过long(长整型),我使用
//Dev-C++ 。经查验VC++ 6.0未有录入long long(双长型)
struct students //函数体
{
long long num; //用双长型定义学号
char name[20]; //用字符型定义姓名数组
}student[10],student1; //student[10]是结构体数组 ,student1 时结构体初始化
int main()
{
printf("************************************\n");
printf("*********本程序所含一下项目*********\n");
printf("************************************\n");
printf("************* 菜单 *************\n");
printf("************* 1.输入 *************\n");
printf("************* 2.排序 *************\n");
printf("************* 3.查找 *************\n");
printf("************************************\n");
printf("\n");
//主函数调用子函数
printf("------------------------------------\n");
Shuru();
printf("------------------------------------\n");
Paixu();
printf("------------------------------------\n");
printf("请输入要查询的学号:");
scanf("%lld",&num);
Chazhao();
return 0;
}
void Shuru() //输入函数
{
int i;
printf("请输入10个学生的姓名和学号(中间空格):\n");
for(i=0;i<10;i++)// 使用for语句经行多次输入
{
scanf("%s %lld",&student[i].name,&student[i].num);
}
printf("\n");
}
void Paixu() //排序函数(冒泡法排序)
{
int i,j;
printf("排完的顺序为:\n");
for(i=0;i<9;i++)
for(j=0;j<9-i;j++) //按学号对学生信息经行排序
{
if(student[j].num > student[j+1].num) //整型数字的比较
{
student1=student[j];
student[j]=student[j+1];
student[j+1]=student1;
}
}
for(i=0;i<10;i++) // 使用for语句经行多次输出
printf("%lld %s\n",student[i].num,student[i].name);
printf("\n");
}
void Chazhao() //查找函数(折半法查找)
{
int top,bot,find,mid,i;
find=0;top=0;bot=9;
while(top<=bot && find==0)
{
mid=(top+bot)/2; //找到位于中间的学号
if(num == student[mid].num)
find=1; //如果在中间就直接找到
else if(num < student[mid].num)
bot=mid-1; //如果不在中间就向前一个寻找或后一个寻找
else top=mid+1;
}
if(find==0)
printf("%lld 输入有误或没有该名学生\n",num);
else
{
i=mid; //将找到的位置赋值给i
printf("查询的这位学生姓名为:%s\n",student[i].name);
}
printf("\n");
}
小白第一次写文章,有点小
如果有错误的地方,还请大佬斧正
如果大家喜欢这篇文章,请一键三联(帅的坑定)
感谢大家的支持。