數(shù)據(jù)結(jié)構(gòu)實現(xiàn)學(xué)生信息管理系統(tǒng)功能
2023-07-19 15:27 作者:學(xué)習(xí)微站公眾號 | 我要投稿
學(xué)生信息管理系統(tǒng)
1、 學(xué)生信息錄入:主要是錄入學(xué)生班級信息和學(xué)生基本情況;
2、 學(xué)生信息查詢:按指定系檢索該系的學(xué)生信息,其中包括所有的學(xué)生信息;
3、 學(xué)生信息維護:維護學(xué)生、系別、課程、學(xué)生選課及成績等方面的基本信息,包括增加、刪除和修改;
4、 學(xué)生選課:為學(xué)生提供選課界面,包括所有課程信息。進入該界面前學(xué)生要輸入正確的學(xué)號和姓名。
具體代碼如下:(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,"數(shù)據(jù)結(jié)構(gòu)",3,0},{2,"java語言",3,0},
{3,"大學(xué)英語",5,0},{4,"軟件工程",4,0},{5,"線性代數(shù)",3,0} };
void Output_course(struct course *p)
{
system("cls");
printf("課程信息如下: ? \n");
for (p = cour; p < cour + 5; p++)
printf("課程號--%d ? 科目--%7s ? 學(xué)分--%d ? 已選人數(shù)--%d\n\n",
p->num, p->subject, p->mark, p->count);
}
struct student
{
long num;
char name[10];
char order1[10];
char order2[10];
}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("學(xué)生的選課情況如下:\n");
for(p=stu;p<stu+8;p++)
printf("學(xué)號--%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])
{
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("請輸入學(xué)號(20170401-20170408):");
scanf("%d", &n);
printf("請輸入學(xué)號對應(yīng)的姓名:");
scanf("%d", &h);
for (p = stu; p < stu + 8; p++)
{
if (n == p->num)
{
system("cls");
printf("\n\n\n 該學(xué)生信息如下\n\n\n");
printf("學(xué)號--%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.修改學(xué)號 ? 2.修改姓名 ? 3.修改所選課程\n");
scanf("%d", &s);
{ if (s == 1)
{
printf("\n 學(xué)號修改為:\n");
scanf("%d", &m);
p->num = m;
system("cls");
printf("\n\n\n\n\n\n\n修改后如下:\n");
printf("學(xué)號--%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("學(xué)號--%d ?姓名--%s ?課程1--%s ?課程2--%s\n\n",
p->num, p->name, p->order1, p->order2);
}
if (s == 3)
{
system("cls");
printf("\n 輸入你想修改的課程:區(qū)分大小寫\n");
scanf("%s", &k);
{if (strcmp(p->order1, k) == 0)
{
system("cls");
printf("\n1.數(shù)據(jù)結(jié)構(gòu) ?2.java語言 ? 3.大學(xué)英語 ? 4.軟件工程 ? 5.線性代數(shù)\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學(xué)生信息 \n\n");
printf("學(xué)號--%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.數(shù)據(jù)結(jié)構(gòu) ?2.java語言 ? 3.大學(xué)英語 ? 4.軟件工程 ? 5.線性代數(shù)\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學(xué)生信息 \n\n");
printf("學(xué)號--%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("請輸入學(xué)號(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.數(shù)據(jù)結(jié)構(gòu) ?2.java語言 ? 3.大學(xué)英語 ? 4.軟件工程 ? 5.線性代數(shù)\n\n");
printf("\n請選第一門課:不選請按1-5外任意數(shù)字鍵返回\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 ? 學(xué)生信息:\n");
printf("學(xué)號--%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.數(shù)據(jù)結(jié)構(gòu) ?2.java語言 ? 3.大學(xué)英語 ? 4.軟件工程 ? 5.線性代數(shù)\n\n");
printf("\n 請選第二門課:不選請按 1-5 外任意數(shù)字鍵返回\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 ? 學(xué)生信息:\n");
printf("學(xué)號--%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************歡迎來到選課系統(tǒng)************\n\n");
printf("\t\t**-------- 1 瀏覽課程信息 ------------**\n\n");
printf("\t\t**-------- 2 瀏覽學(xué)生選課情況 --------**\n\n");
printf("\t\t**-------- 3 學(xué)生信息查詢和修改 ------**\n\n");
printf("\t\t**-------- 4 學(xué)生選課 ----------------**\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("請輸入正確數(shù)字!\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("請輸入學(xué)生的學(xué)號: ");
scanf("%s",&q->sno);
while(judge(q->sno))
{
printf("學(xué)號重復(fù),請重新輸入:");
scanf("%s",&q->sno);
}
strcpy(sno[count],q->sno);count++;
printf("請輸入學(xué)生的系別: ");
scanf("%s",&q->sdepartment);
printf("請輸入學(xué)生的班級: ");
scanf("%s",&q->sclass);
printf("請輸入學(xué)生的課程: ");
scanf("%s",&q->scourse);
printf("請輸入學(xué)生的姓名: ");
scanf("%s",&q->sname);
printf("請輸入學(xué)生的性別: ");
? ?scanf("%s",&q->ssex);
printf("請輸入學(xué)生的平時成績: ");
? ?scanf("%f",&q->psscore);
printf("請輸入學(xué)生的實驗成績: ");
? ?scanf("%f",&q->syscore);
printf("請輸入學(xué)生的期末成績: ");
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繼續(xù)輸入,否則退出\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("輸入位置不規(guī)范!\n");
else
{
while (p&&i!=j)
{
p=p->next;j++;
}
if(!p&&i!=0) ?printf("未找到該結(jié)點不能插入!");
else
{
q=(linklist)malloc(sizeof(student));
printf("請輸入學(xué)生的學(xué)號: ");
scanf("%s",&q->sno);
while(judge(q->sno))
{
printf("學(xué)號重復(fù),請重新輸入:");
scanf("%s",&q->sno);
}
strcpy(sno[count],q->sno);count++;
printf("請輸入學(xué)生的系別: ");
scanf("%s",&q->sdepartment);
printf("請輸入學(xué)生的班級: ");
scanf("%s",&q->sclass);
printf("請輸入學(xué)生的課程: ");
scanf("%s",&q->scourse);
printf("請輸入學(xué)生的姓名: ");
scanf("%s",&q->sname);
printf("請輸入學(xué)生的性別: ");
scanf("%s",&q->ssex);
printf("請輸入學(xué)生的平時成績: ");
scanf("%f",&q->psscore);
printf("請輸入學(xué)生的實驗成績: ");
scanf("%f",&q->syscore);
printf("請輸入學(xué)生的期末成績: ");
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("請輸入要修改的學(xué)生學(xué)號:");
scanf("%s",&sno);
if(!q) ?printf("修改失敗,沒有學(xué)生信息!\n");
else
{
while(q!=NULL)
{
if(strcmp(q->sno,sno)==0)
{
printf("請輸入學(xué)生的系別: ");
? ?scanf("%s",&q->sdepartment);
? ?printf("請輸入學(xué)生的班級: ");
? ?scanf("%s",&q->sclass);
? ?printf("請輸入學(xué)生的課程: ");
? ?scanf("%s",&q->scourse);
printf("請輸入學(xué)生的學(xué)號: ");
scanf("%s",&q->sno);
printf("請輸入學(xué)生的姓名: ");
scanf("%s",&q->sname);
printf("請輸入學(xué)生的性別: ");
scanf("%s",&q->ssex);
printf("請輸入學(xué)生的平時成績: ");
scanf("%f",&q->psscore);
printf("請輸入學(xué)生的實驗成績: ");
scanf("%f",&q->syscore);
printf("請輸入學(xué)生的期末成績: ");
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("修改失敗,沒有該學(xué)生信息!\n\n");
}
}
void shanchu() ? ? ? ? ? ? ? ? ? ? ?
{
linklist pre,q;
char sno[12];
pre=head;
q=head;
printf("請輸入要刪除的學(xué)生學(xué)號:");
scanf("%s",&sno);
if(!q) printf("沒有學(xué)生信息,無法刪除!\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("請輸入需查詢的學(xué)生學(xué)號:");
scanf("%s",&sno);
if(!p) printf("沒有學(xué)生信息,無法查詢!\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("學(xué)號:%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("沒有學(xué)生成績,請先添加學(xué)生成績!\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("暫無學(xué)生成績!\n");
else
{
printf("各個學(xué)生成績?yōu)?\n");
while(p)
{
? ?printf("系別:%s ",p->sdepartment);
printf("班級:%s ",p->sclass);
printf("課程:%s ",p->scourse);
printf("學(xué)號:%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("**************學(xué)生信息管理系統(tǒng)*****************\n");
printf("* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? *\n");
printf("*----------- 1.錄入學(xué)生成績 ------------------*\n");
printf("*----------- 2.增加學(xué)生成績 ------------------*\n");
printf("*----------- 3.修改學(xué)生成績 ------------------*\n");
printf("*----------- 4.刪除學(xué)生成績 ------------------*\n");
printf("*----------- 5.查詢學(xué)生成績 ------------------*\n");
printf("*----------- 6.對學(xué)生成績進行排序 ------------*\n");
printf("*----------- 7.輸出學(xué)生成績 ------------------*\n");
printf("*----------- 8.進入選課系統(tǒng)-------------------*\n");
printf("*----------- 9.退出系統(tǒng)-----------------------*\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("請輸入正確數(shù)字!\n");
}
menu();
}
int main()
{
head=init();
menu();
return 0;
}
運行結(jié)果很多,我簡單的給個主菜單

歡迎您關(guān)注我的微信公眾號:學(xué)習(xí)微站(studysth)

最后,這是我的主頁鏈接:https://blog.csdn.net/weixin_43206161
本文使用 文章同步助手 同步
標(biāo)簽: