这周刚刚学完了线性表,现在就动手实践我很久就想做的事了(怎么感觉到自己懒懒的呢 额, 好像似的,因为这个系统也不算难嘛 重点在于对结构体的操作) 嗯,话不多说,现在就把代码贴出来!
/********************************************************************
文件名:stu_info_mana.cpp
描述: 这个程序用于统计学生的学号,姓名,年龄,性别,专业,班级,
绩点,证书信息,并实现对其的浏览,查找,排序,增加,删除等
基本功能
作者: Anka9080
版本: 1.0
完成日期: 2014/3/22
********************************************************************/
#include
#include
#include
#define MAXSIZE 1000
/* 结构体Datatype用来存放每个学生的各种信息 */
typedef struct
{
int num;
char name[10];
int age;
char sex[3];
char course[15];
char cla[5];
float point;
char cert[20];
} Datatype;
/* 结构体List可看作一张存放许多学生信息的表,后面主要对这张表进行操作 */
typedef struct
{
Datatype data[MAXSIZE];
int len; /* 记录学生人数 */
}List;
/*录入学生信息*/
void input_stu(List *L)
{
int i;
printf("请输入学生人数:");
scanf("%d",&L->len);
printf("请依次输入\n\n");
printf("学号 姓名 年龄 性别 专业 班级 绩点 证书\n");
for(i=0;ilen;i++)
{
scanf("%d%s%d%s%s%s%f%s",&L->data[i].num,L->data[i].name,
&L->data[i].age,L->data[i].sex,L->data[i].course,
L->data[i].cla,&L->data[i].point,L->data[i].cert);
}
}
/* 打印学生信息 */
void print_stu(List *L,int i)
{
printf("%8d%8s%10d%10s%8s%8s%8.2f %s\n",L->data[i].num,L->data[i].name,
L->data[i].age,L->data[i].sex,L->data[i].course,
L->data[i].cla,L->data[i].point,L->data[i].cert);
}
/* 报错显示 */
void err_stu(void)
{
printf("\n操作不合法,请重新操作!\n\n");
}
/* 浏览学生信息 */
void display_stu(List *L)
{
int i;
printf("学号 姓名 年龄 性别 专业 班级 绩点 证书\n");
for(i=0;ilen;i++)
{
print_stu(L,i);
}
}
/* 查找学生信息 */
void search_stu(List *L)
{
int sech,num;
char name[20];
printf("按学号查找请输入1,按姓名查找请输入2:");
scanf("%d",&sech);
if(sech==1)
{
printf("\n请输入学号:");
scanf("%d",&num);
for(int i=0;ilen;i++)
{
if(num==L->data[i].num)
{
print_stu(L,i);
}
}
}
if(sech==2)
{
printf("\n请输入姓名:");
scanf("%s",name);
for(int j=0;jlen;j++)
{
if(strcmp(name,L->data[j].name)==0)
{
print_stu(L,j);
}
}
}
if(sech!=1&&sech!=2)
{
err_stu();
}
}
/* 排序 */
void sort_stu(List *L)
{
int ran;
printf("按学号绩点请输入1,按学号删除请输入2:");
scanf("%d",&ran);
if(ran==1)
{
printf("按绩点从高到低排序如下:\n\n");
Datatype temp;
for(int i=0;ilen-1;i++) /* 冒泡法对元素point进行排序 */
{
for(int j=0;jlen-1)-i;j++)
{
if(L->data[j].point < L->data[j+1].point)
{
temp=L->data[j];
L->data[j]=L->data[j+1];
L->data[j+1]=temp;
}
}
}
display_stu(L); /* 调用浏览函数对整张表打印输出 */
}
if(ran==2)
{
printf("按学号从低到高排序如下:\n\n");
Datatype temp;
for(int i=0;ilen-1;i++) /* 冒泡法对元素point进行排序 */
{
for(int j=0;jlen-1)-i;j++)
{
if(L->data[j].num > L->data[j+1].num)
{
temp=L->data[j];
L->data[j]=L->data[j+1];
L->data[j+1]=temp;
}
}
}
display_stu(L); /* 调用浏览函数对整张表打印输出 */
}
if(ran!=1&&ran!=2)
{
err_stu();
}
}
/* 插入学生信息 */
void add_stu(List *L)
{
Datatype temp;
int temp_num,t=-1;
printf("请输入该学生各项信息:\n");
printf("学号 姓名 年龄 性别 专业 班级 绩点 证书\n");
scanf("%d%s%d%s%s%s%f%s",&temp.num,temp.name,
&temp.age,temp.sex,temp.course,
temp.cla,&temp.point,temp.cert);
printf("若插入A同学前面,请输入A同学的学号:");
scanf("%d",&temp_num);
for(int i=0;ilen;i++)
{
if(temp_num==L->data[i].num)
{
t=i;
}
}
if(t==-1)
{
err_stu();
}
for(int j=L->len-1;j>=t;j--)
{
L->data[j+1]=L->data[j];
}
L->data[t]=temp;
L->len++;
}
/* 删除学生信息 */
void del_stu(List *L)
{
int del,num,t=-1;
char name[20];
printf("按学号删除请输入1,按姓名删除请输入2:");
scanf("%d",&del);
if(del==1)
{
printf("请输入学号:");
scanf("%d",&num);
for(int i=0;ilen;i++)
{
if(num==L->data[i].num)
{
t=i;
}
}
}
if(del==2)
{
printf("请输入姓名:");
scanf("%s",name);
for(int j=0;jlen;j++)
{
if(strcmp(name,L->data[j].name)==0);
{
t=j;
}
}
}
if(del!=1&&del!=2)
{
err_stu();
}
if(t==-1)
{
err_stu();
}
for(int k=t;klen-1;k++)
{
L->data[k]=L->data[k+1];
}
L->len--;
}
/* 菜单 */
void menu_stu()
{
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("***************************************************\n");
}
int main()
{
List *L;
int choice;
L=(List *)malloc(sizeof(List));
L->len=0;
printf(" 欢迎使用大学生信息查询系统 \n");
do
{
menu_stu();
printf("\n请输入你的选择:");
scanf("%d",&choice);
switch(choice)
{
case 1:printf("\n你选择了录入学生信息\n\n");
input_stu(L); break;
case 2:printf("\n你选择了浏览学生信息:\n\n");
display_stu(L); break;
case 3:printf("\n你选择了查找学生信息\n\n");
search_stu(L); break;
case 4:printf("\n你选择了对学生进行排序:\n\n");
sort_stu(L); break;
case 5:printf("\n你选择了插入学生信息\n\n");
add_stu(L); break;
case 6:printf("\n你选择了删除学生信息\n\n");
del_stu(L); break;
default: err_stu();
}
}
while(choice!=0);
free(L);
printf("感谢你的使用,祝你生活愉快!o(^▽^)o ~~\n");
return 0;
}
下面截张 程序 起始画面:
总共273行 第一次写到这个长度 作为渣渣的我要继续加油哈!