学生信息管理系统
1、 学生信息录入:主要是录入学生班级信息和学生基本情况;
2、 学生信息查询:按指定系检索该系的学生信息,其中包括所有的学生信息;
3、 学生信息维护:维护学生、系别、课程、学生选课及成绩等方面的基本信息,包括增加、删除和修改;
4、 学生选课:为学生提供选课界面,包括所有课程信息。进入该界面前学生要输入正确的学号和姓名。
具体代码如下:(vc++6.0刚刚试过可以运行)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include <windows.h>
struct course //定义储存课程信息的结构体
{
int num;//课程号
char subject[10];//课程名
int mark;//学分
int count;//已选人数
}cour[5] = { {1,"数据结构",3,0},{2,"java语言",3,0},
{3,"大学英语",5,0},{4,"软件工程",4,0},{5,"线性代数",3,0} };//课程信息
void Output_course(struct course *p)//调用存储课程信息结构体数组,输出所有课程信息
{
system("cls");
printf("课程信息如下: \n");
for (p = cour; p < cour + 5; p++)
printf("课程号--%d 科目--%7s 学分--%d 已选人数--%d\n\n",
p->num, p->subject, p->mark, p->count);
}
struct student //定义存储学生信息的结构体
{
long num;
char name[10];
char order1[10];//所选课程1
char order2[10];//所选课程2
}stu[8] = { {20170401,"小明","NULL","NULL"},
{20170402,"小红","NULL","NULL"},
{20170403,"小张","NULL","NULL"},
{20170404,"小王","NULL","NULL"},
{20170405,"小花","NULL","NULL"},
{20170406,"小丽","NULL","NULL"},
{20170407,"小雨","NULL","NULL"},
{20170408,"小二","NULL","NULL"},
};
void Output_student(struct student *p)调用存储课程信息结构体数组,输出所有学生信息
{
system("cls");
printf("学生的选课情况如下:\n");
for(p=stu;p<stu+8;p++)
printf("学号--%d 姓名--%3s 课程1--%7s 课程2--%7s\n\n",
p->num, p->name, p->order1, p->order2);
}
void modify(struct student *p, struct course cour[5])
//调用储存course和student的结构体数组,输出任意一个学生信息,并且可以修改
{
int s;
int g;
char b;
char k[10];
char h;
long n;
long m;
int i;
int j;
char name1[20];
system("cls");
printf("请输入学号(20170401-20170408):");
scanf("%d", &n);
printf("请输入学号对应的姓名:");
scanf("%d", &h);
for (p = stu; p < stu + 8; p++)
{
if (n == p->num) //找到对应的学生
{
system("cls");
printf("\n\n\n 该学生信息如下\n\n\n");
printf("学号--%d 姓名--%s 课程1--%s 课程2--%s\n\n",
p->num, p->name, p->order1, p->order2);
printf("\nA.修改 退出请按A,a外任意字母键\n");
scanf("%s", &b);
{ if (b == 'a' || b == 'A')
{
printf("\n1.修改学号 2.修改姓名 3.修改所选课程\n");
scanf("%d", &s);
{ if (s == 1)
{
printf("\n 学号修改为:\n"); //修改学号
scanf("%d", &m);
p->num = m;
system("cls");
printf("\n\n\n\n\n\n\n修改后如下:\n");
printf("学号--%d 姓名--%s 课程1--%s 课程2--%s\n\n",
p->num, p->name, p->order1, p->order2);
}
if (s == 2)
{
printf("\n 姓名修改为:\n");
scanf("%20s", name1);
strcpy(p->name, name1);
system("cls");
printf("\n\n\n\n\n 修改后如下\n\n");
printf("学号--%d 姓名--%s 课程1--%s 课程2--%s\n\n",
p->num, p->name, p->order1, p->order2);
}
if (s == 3)
{
system("cls");
printf("\n 输入你想修改的课程:区分大小写\n");
scanf("%s", &k);
{if (strcmp(p->order1, k) == 0)
{
system("cls");
printf("\n1.数据结构 2.java语言 3.大学英语 4.软件工程 5.线性代数\n");
printf("\n你想修改为(1-5):\n");
scanf("%d", &g);
for (i = 0; i < 5; i++)
{
if (g == i + 1)
{
if (cour[g - 1].count >= 3)
{
system("cls");
printf("\n\n 该课程已被选满\n");//课程选满,返回主菜单
}
else {
if (strcmp(p->order2, cour[g - 1].subject) == 0)
printf("\n\n 你已选过这门课 \n\n");//重选,返回主菜单
else {
strcpy(p->order1, cour[g - 1].subject);
cour[g - 1].count++;
for (j = 0; j < 5; j++)
{
if (strcmp(cour[j].subject, k) == 0)
cour[j].count--;
}
system("cls");
printf("\n\n学生信息 \n\n");
printf("学号--%d 姓名--%s 课程1--%s 课程2--%s\n\n",
p->num, p->name, p->order1, p->order2);
}
}
}
}
}
else
if (strcmp(p->order2, k) == 0)
{
system("cls");
printf("\n1.数据结构 2.java语言 3.大学英语 4.软件工程 5.线性代数\n");
printf("\n你想修改为(1-5):\n");
scanf("%d", &g);
for (i = 0; i < 5; i++)
{
if (g == i + 1)
{
if (cour[g - 1].count >= 3)
{
printf("\n\n 该课程已被选满\n");//已选满
}
else {
if (strcmp(p->order1, cour[g - 1].subject) == 0)
printf("\n\n 你已选过这门课 \n\n");//重选
else {
strcpy(p->order2, cour[g - 1].subject);
cour[g - 1].count++;
for (j = 0; j < 5; j++)
{
if (strcmp(cour[j].subject, k) == 0)
cour[j].count--;
}
system("cls");
printf("\n\n学生信息 \n\n");
printf("学号--%d 姓名--%s 课程1--%s 课程2--%s\n\n",
p->num, p->name, p->order1, p->order2);
}
}
}
}
}
else printf("\n\n 您还没选这门课或拼写错误\n\n");
}
}
}
}
}
}
}
}
void xuanke(struct student *p,struct course cour[5])//为任意学生去选课
{ long n;int a;int b;int t = 0;int u = 0;int i;
system("cls");
printf("请输入学号(20170401-20170408):");
scanf("%d", &n);
for (p = stu;p < stu + 8;p++)
{
if (n == p->num)//找到相应的学生
{
system("cls");
if (strcmp(p->order1,"NULL")!=0) //第一门课不为空
t = 1;
else
{
system("cls");
printf("\n\n\n\n\n\n请选您的第一门课 提示:您最多只能选二门课\n\n");
printf("\n1.数据结构 2.java语言 3.大学英语 4.软件工程 5.线性代数\n\n");
printf("\n请选第一门课:不选请按1-5外任意数字键返回\n\n");
scanf("%d", &a);//输入所选课程编号
for (i = 0; i < 5; i++)
{
if (a == i + 1)
{
if (cour[a - 1].count >= 3)
{
printf("\n\n该课程已被选满\n");//课程选满。返回主菜单
}
else {
if (strcmp(p->order2,cour[a - 1].subject)==0)
printf("\n\n\n 你已选过这门课\n");//重选,返回主菜单
else {
strcpy(p->order1, cour[a - 1].subject);//选课成功
cour[a - 1].count++;
system("cls");
printf("\n\n\n\n\n\n 学生信息:\n");
printf("学号--%d 姓名--%s 课程1--%s 课程2--%s\n\n",
p->num, p->name, p->order1, p->order2);
}
}
}
}
}
if (strcmp(p->order2, "NULL")!=0)//第二门课不为空
u = 1;
else {
printf("\n\n\n\n\n\n请选您的第二门课 提示:您最多只能选二门课\n\n");
printf("\n1.数据结构 2.java语言 3.大学英语 4.软件工程 5.线性代数\n\n");
printf("\n 请选第二门课:不选请按 1-5 外任意数字键返回\n\n");
scanf("%d", &b);
for (i = 0; i < 5; i++)
{
if (b == i + 1)
{
if (cour[b - 1].count >= 3)
{
printf("\n\n 该课程已被选满 \n");//已选满,返回主菜单
}
else {
if (strcmp(p->order1, cour[b - 1].subject)==0)
printf("\n\n\n 你已选过这门课 \n");//重选,返回主菜单
else {
strcpy(p->order2, cour[b - 1].subject);
cour[b - 1].count++;
system("cls");
printf("\n\n\n\n\n\n 学生信息:\n");//成功选课
printf("学号--%d 姓名--%s 课程1--%s 课程2--%s\n\n",
p->num, p->name, p->order1, p->order2);
}
}
}
}
}
if (u==1&&t==1)
printf("\n 您已选满,若想修改请进入菜单 3\n");
}
}
}
void a()
{
for (;;){
int n;
printf("\t\t************欢迎来到选课系统************\n\n");
printf("\t\t**-------- 1 浏览课程信息 ------------**\n\n");
printf("\t\t**-------- 2 浏览学生选课情况 --------**\n\n");
printf("\t\t**-------- 3 学生信息查询和修改 ------**\n\n");
printf("\t\t**-------- 4 学生选课 ----------------**\n\n");
printf("\t\t**-------- 5 退出 --------------------**\n\n");
printf("请选择(1-5):[ ]\b\b");
scanf("%d", &n);
switch (n)
{
case 1:Output_course(cour); break;
case 2:Output_student(stu); break;
case 3:modify(stu,cour); break;
case 4:xuanke(stu,cour); break;
case 5:exit(0);
default:printf("请输入正确数字!\n");
}
}
}
#define N 100
typedef struct stulink_node
{
char sdepartment[10];
char sclass[10];
char scourse[10];
char sno[14];
char sname[10];
char ssex[2];
float psscore;
float syscore;
float qmscore;
float zpscore;
struct stulink_node *next;
}student;
typedef student *linklist;
student *head;
char sno[N][20]={{'a','b'}};
int count;
void display(); //函数声明
int judge(char sno1[]) //判断学号函数
{
int i;
for(i=0;i<N;i++)
{
if(!strcmp(sno1,sno[i]))
return 1;
}
return 0;
}
student *init() //建立一个空的单链表
{
return NULL;
}
float average(student *stu) //求总评成绩函数
{
return (float)(0.4*stu->psscore+0.3*stu->syscore+0.3*stu->qmscore);
}
void luru() //录入学生信息函数
{
linklist p,q;
static int count=0;
char flag='0';
q=(linklist)malloc(sizeof(student));
p=head=NULL;
while(flag=='0')
{
printf("\n");
printf("请输入学生的学号: ");
scanf("%s",&q->sno);
while(judge(q->sno))
{
printf("学号重复,请重新输入:");
scanf("%s",&q->sno);
}
strcpy(sno[count],q->sno);count++;
printf("请输入学生的系别: ");
scanf("%s",&q->sdepartment);
printf("请输入学生的班级: ");
scanf("%s",&q->sclass);
printf("请输入学生的课程: ");
scanf("%s",&q->scourse);
printf("请输入学生的姓名: ");
scanf("%s",&q->sname);
printf("请输入学生的性别: ");
scanf("%s",&q->ssex);
printf("请输入学生的平时成绩: ");
scanf("%f",&q->psscore);
printf("请输入学生的实验成绩: ");
scanf("%f",&q->syscore);
printf("请输入学生的期末成绩: ");
scanf("%f",&q->qmscore);
q->zpscore=average(q);
setbuf(stdin,NULL);
if(head==NULL)
{
head=q;
p=head;
}
else
{
p->next=q;
p=q;
}
q=(linklist)malloc(sizeof(student));
printf("按0继续输入,否则退出\n");
flag=getch();
setbuf(stdin,NULL);
}
free(q);
printf("输入完毕!\n ");
p->next=NULL;
}
void charu() //插入 学生信息函数
{
int j=0,i;
linklist p,q;
p=head;
printf("请输入要插入的位置: ");
scanf("%d",&i);
if(i<0) printf("输入位置不规范!\n");
else
{
while (p&&i!=j)
{
p=p->next;j++;
}
if(!p&&i!=0) printf("未找到该结点不能插入!");
else
{
q=(linklist)malloc(sizeof(student));
printf("请输入学生的学号: ");
scanf("%s",&q->sno);
while(judge(q->sno))
{
printf("学号重复,请重新输入:");
scanf("%s",&q->sno);
}
strcpy(sno[count],q->sno);count++;
printf("请输入学生的系别: ");
scanf("%s",&q->sdepartment);
printf("请输入学生的班级: ");
scanf("%s",&q->sclass);
printf("请输入学生的课程: ");
scanf("%s",&q->scourse);
printf("请输入学生的姓名: ");
scanf("%s",&q->sname);
printf("请输入学生的性别: ");
scanf("%s",&q->ssex);
printf("请输入学生的平时成绩: ");
scanf("%f",&q->psscore);
printf("请输入学生的实验成绩: ");
scanf("%f",&q->syscore);
printf("请输入学生的期末成绩: ");
scanf("%f",&q->qmscore);
q->zpscore=average(q);
if(i==0)
{
q->next=head;
head=q;
}
else
{
q->next=p->next;
p->next=q;
}
}
}
}
void xiugai() //修改学生信息函数
{
linklist q;
int m=0;
char sno[15];
q=head;
printf("请输入要修改的学生学号:");
scanf("%s",&sno);
if(!q) printf("修改失败,没有学生信息!\n");
else
{
while(q!=NULL)
{
if(strcmp(q->sno,sno)==0)
{
printf("请输入学生的系别: ");
scanf("%s",&q->sdepartment);
printf("请输入学生的班级: ");
scanf("%s",&q->sclass);
printf("请输入学生的课程: ");
scanf("%s",&q->scourse);
printf("请输入学生的学号: ");
scanf("%s",&q->sno);
printf("请输入学生的姓名: ");
scanf("%s",&q->sname);
printf("请输入学生的性别: ");
scanf("%s",&q->ssex);
printf("请输入学生的平时成绩: ");
scanf("%f",&q->psscore);
printf("请输入学生的实验成绩: ");
scanf("%f",&q->syscore);
printf("请输入学生的期末成绩: ");
scanf("%f",&q->qmscore);
q->zpscore=average(q);
setbuf(stdin,NULL);
m=1;
printf("修改成功!\n\n");
break;
}
else
q=q->next;
}
if(m==0) printf("修改失败,没有该学生信息!\n\n");
}
}
void shanchu() //删除学生信息函数
{
linklist pre,q;
char sno[12];
pre=head;
q=head;
printf("请输入要删除的学生学号:");
scanf("%s",&sno);
if(!q) printf("没有学生信息,无法删除!\n\n");
else
{
while(q)
{
if(strcmp(q->sno,sno)==0)
{
if(q==head)
{
head=q->next;
free(q);
}
else
{
pre->next=q->next;
free(q);
}
printf("删除成功!\n");
break;
}
else
{
pre=q;
q=q->next;
}
}
}
}
void chaxun() //查询学生信息函数
{
linklist p;
int m=0;
char sno[15];
p=head;
printf("请输入需查询的学生学号:");
scanf("%s",&sno);
if(!p) printf("没有学生信息,无法查询!\n\n");
else
{
while(p)
{
if(strcmp(p->sno,sno)==0)
{
printf("系别:%s\n",p->sdepartment);
printf("班级:%s\n",p->sclass);
printf("课程:%s\n",p->scourse);
printf("学号:%s\n",p->sno);
printf("姓名:%s\n",p->sname);
printf("性别:%s\n",p->ssex);
printf("平时成绩:%-.2f\n",p->psscore);
printf("实验成绩:%-.2f\n",p->syscore);
printf("期末成绩:%-.2f\n",p->qmscore);
printf("总评成绩:%-.2f\n",p->zpscore);
m=1;
break;
}
else
p=p->next;
}
if(m==0) printf("查询失败,没有该生信息!\n");
}
}
void paixu() //对学生总评成绩排序(冒泡法)
{
linklist p,q,r;
student temp;
r=head;
if(r==NULL) printf("没有学生成绩,请先添加学生成绩!\n");
else
{
while(r)
{
p=r;
q=r->next;
while(q)
{
if(p->zpscore < q->zpscore)
{
strcpy(temp.sdepartment,p->sdepartment);
strcpy(temp.sclass,p->sclass);
strcpy(temp.scourse,p->scourse);
strcpy(temp.sno,p->sno);
strcpy(temp.sname,p->sname);
strcpy(temp.ssex,p->ssex);
temp.psscore=p->psscore;
temp.syscore=p->syscore;
temp.qmscore=p->qmscore;
temp.zpscore=p->zpscore;
strcpy(p->sdepartment,q->sdepartment);
strcpy(p->sclass,q->sclass);
strcpy(p->scourse,q->scourse);
strcpy(p->sno,q->sno);
strcpy(p->sname,q->sname);
strcpy(p->ssex,q->ssex);
p->psscore=q->psscore;
p->syscore=q->syscore;
p->qmscore=q->qmscore;
p->zpscore=q->zpscore;
strcpy(q->sdepartment,temp.sdepartment);
strcpy(q->sclass,temp.sclass);
strcpy(q->scourse,temp.scourse);
strcpy(q->sno,temp.sno);
strcpy(q->sname,temp.sname);
strcpy(q->ssex,temp.ssex);
q->psscore=temp.psscore;
q->syscore=temp.syscore;
q->qmscore=temp.qmscore;
q->zpscore=temp.zpscore;
}
q=q->next;
}
r=r->next;
}
printf("****排序完毕,按由大到小的总评成绩!");
display();
}
}
void display() //输出学生信息函数
{
student *p;
p=head;
if(!p) printf("暂无学生成绩!\n");
else
{
printf("各个学生成绩为:\n");
while(p)
{
/*printf("系别:%s,班级:%s,课程:%s,学号:%s,姓名:%s,性别:%s,
平时成绩:%-.2f,实验成绩:%-.2f,期末成绩:%-.2f,总评成绩:%-.2f\n",
p->sdepartment,p->sclass,p->scourse,p->sno,p->sname,p->ssex,
p->psscore,p->syscore,p->qmscore,p->zpscore);*/
printf("系别:%s ",p->sdepartment);
printf("班级:%s ",p->sclass);
printf("课程:%s ",p->scourse);
printf("学号:%s ",p->sno);
printf("姓名:%s ",p->sname);
printf("性别:%s ",p->ssex);
printf("平时成绩:%-.2f ",p->psscore);
printf("实验成绩:%-.2f ",p->syscore);
printf("期末成绩:%-.2f ",p->qmscore);
printf("总评成绩:%-.2f\n",p->zpscore);
p=p->next;
}
}
}
void menu()
{
int choose;
printf("**************学生信息管理系统*****************\n");
printf("* *\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");
printf("\n");
printf("请输入你的选择:");
scanf("%d",&choose);
switch(choose)
{
case 1:luru();break;
case 2:charu();break;
case 3:xiugai();break;
case 4:shanchu();break;
case 5:chaxun();break;
case 6:paixu();break;
case 7:display();break;
case 8:a();break;
case 9:exit(0);break;
default:printf("请输入正确数字!\n");
}
menu();
}
int main()
{
head=init();
menu();
return 0;
}
运行结果很多,我简单的给个主菜单
欢迎您关注我的微信公众号:学习微站(studysth)