有主菜单,和四个功能子菜单!功能强大!!!
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>
#define SIZE 40/*符号常量:班级人数*/
//学生结构
struct student
{
int sno;
char sname[20];
char sex[10];
char Dept[100];
int age;
};
//学生自然信息结构
struct Node_s
{
student data;
Node_s *next;
};
//课程结构
struct course
{
int cno;
char cname[30];
int credit;
};
//学生课程信息结构
struct Node_c
{
course data;
Node_c *next;
};
//学生选课成绩结构
struct sc
{
int sno;
int cno;
float grade;
};
struct Node_sc
{
sc data;
Node_sc *next;
};
Node_s *create_s();//建立学生自然信息链表1
Node_c *create_c();//建链课程链表2
Node_sc *create_sc();//建立学生选课成绩链表3
void traversal(Node_s *phead_s);//遍历1
void traversal(Node_c *phead_c);//遍历2
void traversal(Node_sc *phead_sc);//遍历3
void fileOutput_new(Node_s *phead_s);//存盘 4
void fileOutput_new(Node_c *phead_c);//存盘 5
void fileOutput_new(Node_sc *phead_sc);//存盘 6
void fileOutput(Node_s *phead_s);//存盘 1
void fileOutput(Node_c *phead_c);//存盘 2
void fileOutput(Node_sc *phead_sc);//存盘 3
Node_s *fileInput_s();//读盘 1
Node_c *fileInput_c();//读盘 2
Node_sc *fileInput_sc();//读盘 3
void query(Node_s *phead);//4按学号查询学生自然信息
void query(Node_sc *phead);//5按学号和课程号查询学生成绩
void query_all(Node_sc *phead);//6按学号查询学生的成绩明细
void faildata(Node_s*phead_s,Node_sc*phead_sc);//不及格学生数据统计
void findage(Node_s *phead);//统计年龄
Node_s *deletion(Node_s* phead);//删除学生数据
Node_c *deletion(Node_c* phead);//删除课程数据
Node_sc *deletion(Node_sc* phead);//删除学生单科成绩数据
Node_sc *deletion_all(Node_sc* phead);//删除学生所有成绩
Node_s *alter(Node_s* phead);// 修改学生数据
Node_c *alter(Node_c* phead);//修改课程数据
Node_sc *alter(Node_sc* phead);//修改成绩数据
void findgrade(Node_sc *phead);
void querySexnumber(Node_s* phead);//查询男女学生人数
void querySurname(Node_s *phead);//查询姓氏学生人数
void queryDept(Node_s *phead);//查询专业学生人数
void queryAge(Node_s *phead);//查询年龄学生人数
int count(Node_s *phead);//学生人数统计
int main()
{ int a,b,c,d,e;
Node_s *phead_s = NULL;
Node_c *phead_c = NULL;
Node_sc *phead_sc = NULL;
for(;;)
{
system("cls");
//system("color 5F");
printf(" \n");
printf("****************************************************\n");
printf("* *\n");
printf("* 学生信息管理系统 *\n");
printf("* *\n");
printf("* *\n");
printf("* 主菜单 *\n");
printf("* *\n");
printf("* 1.录入数据功能菜单 *\n");
printf("* 2.数据查询功能菜单 *\n");
printf("* 3.数据修改功能菜单 *\n");
printf("* 4.数据删除功能菜单 *\n");
printf("* 0. 退出 *\n");
printf("* *\n");
printf("* *\n");
printf("* 制作人: 飞宇 *\n");
printf("****************************************************\n");
printf("----------------------\n选择数字(0-4):\n");
printf("选择学生信息管理功能:");
scanf("%d",&a);//程序选项
system("cls");
switch(a)
{
case 1 :
{
while(1)
{
system("cls");
printf("****************************************************\n");
printf("* *\n");
printf("* 录入数据功能菜单 *\n");
printf("* *\n");
printf("* *\n");
printf("* 1.输入学生自然数据 *\n");
printf("* 2.输入课程数据 *\n");
printf("* 3.输入学生选课成绩数据 *\n");
printf("* 0. 返回上一菜单 *\n");
printf("* *\n");
printf("* *\n");
printf("****************************************************\n");
printf("------------------------------\n选择数字(0-3):\n");
printf("选择软件功能菜单功能:");
scanf("%d",&b);//程序选项
system("cls");
if(b == 1)
{
printf("功能 1. 学生自然数据输入开始...\n");
phead_s = create_s();
fileOutput(phead_s);
system("pause");
}
if(b == 2)
{
printf("功能 2. 课程数据输入开始...\n");
phead_c = create_c();
fileOutput(phead_c);
system("pause");
}
if(b == 3)
{
printf("功能 3. 学生选课成绩数据输入开始...\n");
phead_sc = create_sc();
fileOutput(phead_sc);
system("pause");
}
if(b == 0)
{
break;
}
}
}
break;
case 2 :
{
while(1)
{
system("cls");
printf("****************************************************\n");
printf("* *\n");
printf("* 数据查询功能菜单 *\n");
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("* 10.查询男女学生人数 *\n");
printf("* 11.按姓氏查询学生信息 *\n");
printf("* 12.查询专业学生人数 *\n");
printf("* 13.统计学生人数总和 *\n");
printf("* 0. 返回上一菜单 *\n");
printf("* *\n");
printf("* *\n");
printf("****************************************************\n");
printf("-----------------------------------\n选择数字(0-13):\n");
printf("选择数据查询功能:");
scanf("%d",&c);//程序选项
system("cls");
if(c == 1)
{
printf("功能 1. 查询所有学生数据开始...\n");
phead_s = fileInput_s();
traversal(phead_s);
system("pause");
}
if(c == 2)
{
printf("功能 2. 查询所有课程数据开始...\n");
phead_c = fileInput_c();
traversal(phead_c);
system("pause");
}
if(c == 3)
{
printf("功能 3. 查询所有学生选课及成绩数据开始...\n");
phead_sc = fileInput_sc();
traversal(phead_sc);
system("pause");
}
if(c == 4)
{
printf("功能 4. 按学号查询学生数据开始...\n");
phead_s = fileInput_s();
query(phead_s);
system("pause");
}
if(c == 5)
{
printf("功能 5. 按学号和课程号查询学生成绩开始...\n");
phead_sc = fileInput_sc();
query(phead_sc);
system("pause");
}
if(c == 6)
{
printf("功能 6. 按学号查询学生成绩明细开始...\n");
phead_sc = fileInput_sc();
query_all(phead_sc);
system("pause");
}
if(c == 7)
{
printf("功能 7. 统计平均分不及格学生数据开始...\n");
phead_s = fileInput_s();
phead_sc = fileInput_sc();
faildata(phead_s,phead_sc);
system("pause");
}
if(c == 8)
{
phead_s = fileInput_s();
printf("功能 8. 统计不同年龄对应人数开始...\n");
findage(phead_s);
system("pause");
}
if(c == 9)
{
printf("功能 9. 输出成绩明细 平均成绩及名次开始...\n");
phead_sc = fileInput_sc();
findgrade(phead_sc);
system("pause");
}
if(c == 10)
{
printf("功能 10. 查询男女学生人数开始... \n");
phead_s = fileInput_s();
querySexnumber(phead_s);//查询性别人数
system("pause");
}
if(c == 11)
{
printf("功能 11. 查询姓氏学生人数开始... \n");
phead_s = fileInput_s();
querySurname(phead_s);//查询姓氏人数
system("pause");
}
if(c == 12)
{
printf("功能 12. 查询学生专业人数开始...\n");
phead_s = fileInput_s();
queryDept(phead_s);//查询学生专业人数
system("pause") ;
}
if(c == 13)
{
printf("功能 14. 统计学生人数\n");
int People_num = count(phead_s);
printf("学生人数:%d\n",People_num);
system("pause");
}
if(c == 0)
{
break;
}
}
}
break;
case 3 :
{
while(1)
{
system("cls");
printf("****************************************************\n");
printf("* *\n");
printf("* 数据修改功能菜单 *\n");
printf("* *\n");
printf("* *\n");
printf("* 1.按学号修改学生自然数据 *\n");
printf("* 2.按课程号修改课程数据 *\n");
printf("* 3.按学号和课程号修改学生成绩 *\n");
printf("* 0. 返回上一菜单 *\n");
printf("* *\n");
printf("* *\n");
printf("****************************************************\n");
printf("-----------------------------\n选择数字(0-3):\n");
printf("选择数据修改功能:");
scanf("%d",&e);//程序选项
system("cls");
if(e == 1)
{
printf("功能 1. 修改学生自然数据开始...\n");
phead_s = fileInput_s();
phead_s = alter(phead_s);
fileOutput_new(phead_s);
system("pause");
}
if(e == 2)
{
printf("功能 2. 修改课程数据开始...\n");
phead_c = fileInput_c();
phead_c = alter(phead_c);
fileOutput_new(phead_c);
system("pause");
}
if(e == 3)
{
printf("功能 3. 修改学生成绩数据开始...\n");
phead_sc = fileInput_sc();
phead_sc = alter(phead_sc);
fileOutput_new(phead_sc);
system("pause");
}
if(e == 0)
{
break;
}
}
}
break;
case 4 :
{
while(1)
{
system("cls");
printf("****************************************************\n");
printf("* *\n");
printf("* 数据删除功能菜单 *\n");
printf("* *\n");
printf("* *\n");
printf("* 1.按学号删除学生数据 *\n");
printf("* 2.按课程号删除课程数据 *\n");
printf("* 3.按学号删除成绩数据 *\n");
printf("* 4.按学号删除学生对应的所有成绩数据 *\n");
printf("* 0. 返回上一菜单 *\n");
printf("* *\n");
printf("* *\n");
printf("****************************************************\n");
printf("----------------------\n选择数字(0-4):\n");
printf("选择数据删除功能:");
scanf("%d",&d);//程序选项
system("cls");
if(d == 1)
{
printf("功能 1. 删除学生数据开始...\n");
phead_s = fileInput_s();
phead_s = deletion(phead_s);
fileOutput_new(phead_s);
system("pause");
}
if(d == 2)
{
traversal(phead_c);
printf("功能 2. 删除课程数据开始...\n");
phead_c = fileInput_c();
traversal(phead_c);
phead_c = deletion(phead_c);
// fileOutput_new(phead_c);
traversal(phead_c);
system("pause");
}
if(d == 3)
{
printf("功能 3. 删除学生单科成绩数据开始...\n");
phead_sc = fileInput_sc();
phead_sc = deletion(phead_sc);
fileOutput_new(phead_sc);
system("pause");
}
if(d == 4)
{
printf("功能 4. 删除学生成绩数据开始...\n");
phead_sc = fileInput_sc();
phead_sc = deletion_all(phead_sc);
fileOutput_new(phead_sc);
system("pause");
}
if(d == 0)
{
break;
}
}
}
break;
case 0 :
{
printf(" 系统运行结束...\n");
return 0;
}
}//switch
}//for
return 0;
}
//修改数据
Node_s *alter(Node_s* phead)
{
int varsno;
printf(" 选择所要修改学生学号:");scanf("%d",&varsno);
Node_s *p = phead;
while(1)
{
if(p->data.sno == varsno)
{
while(1)
{
int a;
system("cls");
printf("****************************************************\n");
printf("* *\n");
printf("* 修改学生自然数据开始 *\n");
printf("* *\n");
printf("* *\n");
printf("* 1.修改姓名 *\n");
printf("* 2.修改性别 *\n");
printf("* 3.修改年龄 *\n");
printf("* 4.修改专业 *\n");
printf("* 0. 返回上一菜单 *\n");
printf("* *\n");
printf("* *\n");
printf("****************************************************\n");
printf("----------------\n选择修改程序(0-3)\n");
scanf("%d",&a);
system("cls");
if(a == 1)
{
printf(" 修改姓名\n");
char name[20];
printf(" 原姓名:%s\n",p->data.sname);
fflush(stdin);
printf(" 更改为:");gets(name);
strcpy(p->data.sname,name);
system("pause");
}
if(a == 2)
{
printf(" 修改性别\n");
char sex[10];
printf(" 原性别:%s\n",p->data.sex);
fflush(stdin);
printf(" 更改为:");gets(sex);
strcpy(p->data.sex,sex);
system("pause");
}
if(a == 3)
{
printf(" 修改年龄\n");
int age;
printf(" 原年龄:%d\n",p->data.age );
printf(" 更改为:");scanf("%d",&age);
p->data.age = age;
system("pause");
}
if(a == 4)
{
printf(" 修改专业");
char dept[21];
printf(" 原专业: %s\n",p->data.Dept);
fflush(stdin);
printf(" 更改为:");
gets(dept);
strcpy(p->data.Dept,dept);
system("pause");
}
if(a == 0)
{
break;
}
}
break;
}
p = p->next ;
}
return phead;
}
Node_c *alter(Node_c* phead)
{
int varsno;
printf("选择所要修改课程号:");scanf("%d",&varsno);
Node_c *p = phead;
while(1)
{
if(p->data.cno == varsno)
{
while(1)
{
int a;
system("cls");
printf("****************************************************\n");
printf("* *\n");
printf("* 修改课程数据开始 *\n");
printf("* *\n");
printf("* *\n");
printf("* 1.修改课程名 *\n");
printf("* 2.修改学分 *\n");
printf("* 0. 返回上一菜单 *\n");
printf("* *\n");
printf("* *\n");
printf("****************************************************\n");
printf("----------------\n选择修改课程数据功能(0-2)\n");
scanf("%d",&a);
system("cls");
if(a == 1)
{
printf(" 修改课程名\n");
char cname[20];
printf("原姓名:%s\n",p->data.cname);
fflush(stdin);
printf("更改为:");gets(cname);
strcpy(p->data.cname,cname);
system("pause");
}
if(a == 2)
{
printf(" 修改学分\n");
int credit;
printf("原学分: %d\n",p->data.credit );
fflush(stdin);
printf("更改为:");scanf("%d",&credit);
p->data.credit = credit;
system("pause");
}
if(a == 0)
{
break;
}
}
break;
}
p = p->next ;
}
return phead;
}
Node_sc *alter(Node_sc* phead)
{
int varsno;
printf("选择成绩数据修改学号:");scanf("%d",&varsno);
Node_sc *p = phead;
while(1)
{
if(p->data.sno == varsno)
{
while(1)
{
int a;
system("cls");
printf("****************************************************\n");
printf("* *\n");
printf("* 修改成绩数据开始 *\n");
printf("* *\n");
printf("* *\n");
printf("* 1.修改课程号 *\n");
printf("* 2.修改成绩 *\n");
printf("* 0. 返回上一菜单 *\n");
printf("* *\n");
printf("* *\n");
printf("****************************************************\n");
printf("----------------\n选择修改成绩数据功能(0-2)\n");
scanf("%d",&a);
system("cls");
if(a == 1)
{
printf(" 修改课程号\n");
int cno;
printf(" 原课程号:%d\n",p->data.cno);
fflush(stdin);
printf(" 更改为:");scanf("%d",&cno);
p->data.cno = cno;
system("pause");
}
if(a == 2)
{
printf(" 修改成绩\n");
float grade;
printf(" 原成绩: %f\n",p->data.grade );
fflush(stdin);
printf(" 更改为:");scanf("%f",&grade);
p->data.grade = grade;
system("pause");
}
if(a == 0)
{
break;
}
}
break;
}
p = p->next ;
}
return phead;
}
//修改后的存盘
void fileOutput_new(Node_s *phead_s)//存盘4
{
if(phead_s != NULL)
{
FILE *fp1;
fp1=fopen("student.dat","wb");
Node_s* p = phead_s;
if(p == NULL)
{
fwrite(p,sizeof(student),1,fp1);
}
else
{
while(p != NULL)
{
fwrite(p,sizeof(student),1,fp1);
p = p->next;
}
}
fclose(fp1);//student
}
}
void fileOutput_new(Node_c *phead_c)//存盘5
{ if(phead_c != NULL)
{
FILE *fp2;
fp2=fopen("course.dat","wb");
if(phead_c == NULL)
{
fwrite(phead_c,sizeof(student),1,fp2);
}
for(Node_c *p=phead_c;p!=NULL;p=p->next)
{
fwrite(p,sizeof(course),1,fp2);
}
fclose(fp2);//course
}
}
void fileOutput_new(Node_sc *phead_sc)//存盘 6
{
if(phead_sc != NULL)
{
FILE *fp3;
fp3=fopen("sc.dat","wb");
if(phead_sc == NULL)
{
fwrite(phead_sc,sizeof(student),1,fp3);
}
for(Node_sc *p=phead_sc;p!=NULL;p=p->next)
{
fwrite(p,sizeof(sc),1,fp3);
}
fclose(fp3);
}
}
//数据的删除
Node_c *deletion(Node_c* phead)//课程数据删除
{
int varcno;
printf(" 选择删除课程号:"); scanf("%d",&varcno);
Node_c *p = NULL;
Node_c *q = NULL;
p = phead;
q = phead;
while(p != NULL)
{
if(phead->data.cno == varcno )
{
phead = phead->next ;
free(q);
break;
}//头
if(p->next->data.cno == varcno)
{
q = p->next;
p->next = p->next->next ;
free (q);
break;
}
p = p->next ;
}
return phead;
}
Node_sc *deletion_all(Node_sc* phead) //全部成绩数据
{
int varsno,i=0;
printf(" 选择删除学号 :"); scanf("%d",&varsno);
Node_sc *p = NULL;
Node_sc *q = NULL;
p = phead;
q = phead;
while(1)
{
if(i==0&&p->data.sno != varsno )
{
q = p;
p = p->next ;
i++;
}
if(i!=0&&p->data.sno != varsno )
{
q->next=p;
q= q->next ;
p = p->next ;
}
if(p->data.sno == varsno)
{
p = p->next ;
}
if(p == NULL) break;
}
return phead;
}
Node_sc *deletion(Node_sc* phead)//学生单科成绩数据删除
{
int varsno,varcno;
printf(" 选择删除学号 :"); scanf("%d",&varsno);
printf(" 选择删除课程号:"); scanf("%d",&varcno);
Node_sc *p = NULL;
Node_sc *q = NULL;
p = phead;
q = phead;
while(p != NULL)
{
if(phead->data.sno == varsno&&phead->data.cno == varcno)
{
phead = phead->next ;
free(q);
break;
}//头
if(p->next->data.sno == varsno&&p->data.cno == varcno)
{
q = p->next;
p->next = p->next->next ;
free (q);
break;
}
p = p->next ;
}
return phead;
}
Node_s *deletion(Node_s* phead)//学生数据删除
{
int varsno;
printf(" 选择删除学号:"); scanf("%d",&varsno);
Node_s *p = NULL;
Node_s *q = NULL;
p = phead;
q = phead;
while(p != NULL)
{
if(phead->data.sno == varsno )
{
phead = phead->next ;
free(q);
break;
}//头
if(p->next->data.sno == varsno)
{
q = p->next;
p->next = p->next->next ;
free (q);
break;
}
p = p->next ;
}
return phead;
}
//年龄统计
void findage(Node_s *phead)//年龄统计
{
int count = 0;
Node_s *p = phead;
while(1)
{
if(p!=NULL)
{
count++;
}
p = p->next ;
if(p==NULL) break;
}
p = phead;
int a[count],e[120];
for(int i=0;i<count;i++)
{
a[i] =p->data.age ;
p = p->next ;
}
for(int i=0; i<120; i++)
{
e[i]=0;
}
for(int i=0;i<count;i++)
{
for(int j=0;j<120;j++)
{
if(a[i]==j)
e[j]++;
}
}
for(int j=0;j<100;j++)
if(e[j]>0)
printf("%d岁\t%d人\n",j,e[j]);
}
//查找学生
void findgrade(Node_sc *phead)
{
int sno;
float count = 0;
float sum=0,ave = 0;
Node_sc *p = phead;
printf(" 调查学生学号:");scanf("%d",&sno);
while(1)
{
if(p->data.sno == sno)
{
sum = sum+p->data.grade;
count++;
}
p = p->next ;
if(p == NULL) break;
}
ave = sum/count;
p=phead;
printf("%d号学生的平均成绩%f\n",sno,ave);
printf("%d号学生成绩如下:\n",sno);
while(1)
{
if(p->data.sno == sno)
{
printf("课程号:%d\n成绩:%f\n---------------\n",p->data.cno ,p->data.grade);
}
p = p->next ;
if(p == NULL) break;
}
}
void faildata(Node_s *phead_s,Node_sc*phead_sc)//不合格学生统计
{
int sno;
float count = 0;
float sum=0,ave = 0;
Node_s *q = phead_s;
Node_sc *p = phead_sc;
printf("调查学生学号:");scanf("%d",&sno);
for(;;)
{ while(1)
{
if(p->data.sno == sno)
{
sum = sum+p->data.grade;
count++;
}
p = p->next ;
if(p == NULL) break;
}
printf("%f %f\n",sum,count);
ave = sum/count;
p=phead_sc;
if(ave<60)
{
printf("该生成绩不合格!\n该生自然数据:\n");
while(1)
{
if(q->data.sno == sno)
{
printf("---------------\n学号:%d\n姓名:%s\n性别:%s\n年龄:%d\n---------------\n",q->data.sno ,q->data.sname,q->data.sex,q->data.age);
}
q=q->next;
if(q == NULL) break;
}
printf("※※※※※※※|\n该生各科成绩:\n---------------\n");
while(1)
{
if(p->data.sno == sno)
{
printf("课程号:%d\n成绩:%f\n---------------\n",p->data.cno ,p->data.grade);
}
p = p->next ;
if(p == NULL) break;
}
}
break;
}
}
void query_all(Node_sc *phead)//6按学号查询学生的成绩明细
{
int sno;
printf("选择查询学号:");scanf("%d",&sno);
printf("\n%d号学生成绩如下:\n****************\n",sno);
Node_sc *p=phead;
while(1)
{
if(p->data.sno == sno)
{
printf("课程号:%d\n成绩:%f\n****************\n",p->data.cno ,p->data.grade);
}
p=p->next;
if(p == NULL) break;
}
}
void query(Node_sc *phead)//5按学号和课程号查询学生成绩
{
int sno,cno;
printf("选择查询学号 :");scanf("%d",&sno);
printf("选择查询课程号:");scanf("%d",&cno);
Node_sc *p=phead;
while(1)
{
if(p->data.cno == cno&&p->data.sno == sno)
{
printf("成绩:%f\n",p->data.grade);
}
p=p->next;
if(p == NULL) break;
}
}
void query(Node_s *phead)
{
int varsno;
printf("选择查询学号:");
scanf("%d",&varsno);
Node_s *p=NULL;
Node_s *p_node=NULL;
p=phead;
while(1)
{
if(p->data.sno == varsno)
{
p_node=p;
printf("--------\n学号:%d\n姓名:%s\n性别:%s\n年龄:%d\n--------\n",p_node->data.sno,p_node->data.sname,p_node->data.sex,p_node->data.age);
}
p=p->next;
if(p == NULL) break;
}
}
//读盘
Node_s *fileInput_s()
{
Node_s *phead=NULL;
FILE *fp;
if((fp=fopen("student.dat","r"))==0) return phead;
Node_s *ptail, *pnew;
int i=0;
student s;
while(fread(&s,sizeof(student),1,fp)!=0)
{
pnew=(Node_s*)malloc(sizeof(Node_s));
pnew->data=s;
pnew->next=NULL;
if(i==0)
{
phead=pnew;
ptail=pnew;
}
else
{
ptail->next=pnew;
ptail=pnew;
}
i++;
}
fclose(fp);
return phead;
}
Node_c *fileInput_c()
{
Node_c *phead = NULL;
FILE *fp;
if((fp=fopen("course.dat","r")) == 0) return phead;
Node_c *ptail = NULL, *pnew = NULL;
int i=0;
course s;
while(fread(&s,sizeof(course),1,fp)!=NULL)
{
pnew = (Node_c*)malloc(sizeof(Node_c));
pnew->data = s;
pnew->next = NULL;
if(i == 0)
{
phead = pnew;
ptail = pnew;
}
else
{
ptail->next = pnew;
ptail = ptail->next;
}
i++;
}
fclose(fp);
return phead;
}
Node_sc *fileInput_sc()
{
Node_sc *phead = NULL;
FILE *fp;
if((fp=fopen("sc.dat","r")) == 0) return phead;
Node_sc *ptail, *pnew;
int i=0;
sc s;
while(fread(&s,sizeof(sc),1,fp)!=0)
{
pnew = (Node_sc*)malloc(sizeof(Node_sc));
pnew->data = s;
pnew->next = NULL;
if(i == 0)
{
phead = pnew;
ptail = pnew;
}
else
{
ptail->next = pnew;
ptail = pnew;
}
i++;
}
ptail->next=NULL;
fclose(fp);
return phead;
}
//键盘输入的存盘
void fileOutput(Node_s *phead_s)//存盘1
{
if(phead_s != NULL)
{
FILE *fp1;
fp1=fopen("student.dat","ab");
for(Node_s *p=phead_s;p!=NULL;p=p->next)
{
fwrite(p,sizeof(student),1,fp1);
}
fclose(fp1);//student
}
}
void fileOutput(Node_c *phead_c)//存盘2
{ if(phead_c != NULL)
{
FILE *fp2;
fp2=fopen("course.dat","ab");
for(Node_c *p=phead_c;p!=NULL;p=p->next)
{
fwrite(p,sizeof(course),1,fp2);
}
fclose(fp2);//course
}
}
void fileOutput(Node_sc *phead_sc)//存盘 3
{
if(phead_sc != NULL)
{
FILE *fp3;
fp3=fopen("sc.dat","ab");
for(Node_sc *p=phead_sc;p!=NULL;p=p->next)
{
fwrite(p,sizeof(sc),1,fp3);
}
fclose(fp3);
}
}
//遍历
void traversal(Node_sc *phead_sc)
{
int i = 0;
while(1)
{
if(i == 0)
{
printf("--------------------------------------------\n");
printf("Sno Course name Score \n");
printf("--------------------------------------------\n");
if(phead_sc == NULL)
{
printf(" \n");
printf(" 链 表 为 空! \n");
}
}
else
{
if(phead_sc == NULL) break;
printf("%d%9s%8d\n",phead_sc->data.sno,phead_sc->data.cno,phead_sc->data.grade);
phead_sc=phead_sc->next;
}
printf(" \n");
i++;
}
printf("--------------------------------------------\n");
}
void traversal(Node_c *phead_c)
{
int i = 0;
while(1)
{
if(i == 0)
{
printf("--------------------------------------------\n");
printf("Course number Course name Credit \n");
printf("--------------------------------------------\n");
if(phead_c == NULL)
{
printf(" \n");
printf(" 链 表 为 空! \n");
}
}
else
{
if(phead_c == NULL) break;
printf("%d%18s%16d\n",phead_c->data.cno,phead_c->data.cname,phead_c->data.credit);
phead_c=phead_c->next;
}
printf(" \n");
i++;
}
printf("--------------------------------------------\n");
}
void traversal(Node_s *phead_s)
{
int i = 0;
while(1)
{
if(i == 0)
{
printf("--------------------------------------------\n");
printf("Sno Sname Sex Dept Age \n");
printf("--------------------------------------------\n");
if(phead_s == NULL)
{
printf(" \n");
printf(" 链 表 为 空! \n");
}
}
else
{
if(phead_s == NULL) break;
printf("%d%9s%8s%8s%9d\n",phead_s->data.sno,phead_s->data.sname,phead_s->data.sex,phead_s->data.Dept,phead_s->data.age);
phead_s=phead_s->next;
}
printf(" \n");
i++;
}
printf("--------------------------------------------\n");
}
//建立链表
Node_s *create_s()
{
Node_s *phead = NULL;
Node_s *ptail = NULL;
Node_s *pnew = NULL;
int i=0,varsno;
printf("温馨提示: \n");
printf("输入学号为'0'时退出\n") ;
while(1)
{
pnew = (Node_s *)malloc(sizeof(Node_s));
printf(" 学号:");
scanf("%d",&varsno);
fflush(stdin);
if(varsno == 0)
{
printf("录入信息结束!\n");
break;
}
pnew->data.sno = varsno;
printf(" 姓名:"); gets(pnew->data.sname );
printf(" 性别:"); gets(pnew->data.sex );
printf(" 专业:"); gets(pnew->data.Dept );
printf(" 年龄:");scanf("%d",&pnew->data.age);
pnew->next = NULL;
printf("\n");
if(i == 0)
{
phead = pnew;
ptail = pnew;
}
if(i != 0)
{
ptail->next = pnew;
ptail = ptail->next ;
}
i++;
}
return phead;
}
Node_c *create_c()
{
Node_c *phead = NULL;
Node_c *ptail = NULL;
Node_c *pnew = NULL;
int i=0,varsno;
printf("温馨提示: \n");
printf("输入课程序号为'0'时退出\n") ;
while(1)
{
pnew = (Node_c *)malloc(sizeof(Node_c));
printf("课程序号:");
scanf("%d",&varsno);
fflush(stdin);
if(varsno == 0)
{
printf("录入信息结束!\n");
break;
}
pnew->data.cno = varsno;
printf(" 课程名:"); gets(pnew->data.cname );
printf(" 学分 :"); scanf("%d",&pnew->data.credit);
pnew->next = NULL;
printf("\n");
if(i == 0)
{
phead = pnew;
ptail = pnew;
}
if(i != 0)
{
ptail->next = pnew;
ptail = ptail->next ;
}
i++;
}
return phead;
}
Node_sc *create_sc()
{
Node_sc *phead = NULL;
Node_sc *ptail = NULL;
Node_sc *pnew = NULL;
int i=0,varsno;
printf("温馨提示: \n");
printf("输入学号为'0'时退出\n") ;
while(1)
{
pnew = (Node_sc *)malloc(sizeof(Node_sc));
printf("学号 :");
scanf("%d",&varsno);
fflush(stdin);
if(varsno == 0)
{
printf("录入信息结束!\n");
break;
}
pnew->data.sno = varsno;
printf("课程号:"); scanf("%d",&pnew->data.cno );
printf("成绩 :"); scanf("%f",&pnew->data.grade);
pnew->next = NULL;
printf("\n");
if(i == 0)
{
phead = pnew;
ptail = pnew;
}
if(i != 0)
{
ptail->next = pnew;
ptail = ptail->next ;
}
i++;
}
return phead;
}
//查询男女学生人数
void querySexnumber(Node_s *phead)
{
unsigned char man[]="男";
unsigned char woman[]="女";
Node_s *p = NULL;
Node_s *q = NULL;
p = phead;
q = phead;
int cnt1;
int cnt2;
while(1)
{
if(p == NULL) break;
if(p != NULL)
{
if(p->data.sex[3] = man[3])
{
cnt1++;
}
else if(p->data.sex[3] = woman[3])
{
cnt2++;
}
}
p = p->next ;
}
printf("****************************************************\n");
printf("* *\n");
printf("* 男生人数为:%d *\n",cnt1);
printf("* *\n");
printf("* 女生人数为:%d *\n",cnt2);
printf("* *\n");
printf("****************************************************\n");
}
//查询姓氏学生人数
void querySurname(Node_s *phead)
{
char *Sur[21];
printf("请输入您需要查询的姓氏: ");
gets(*Sur);
Node_s *p = NULL;
Node_s *q = NULL;
p = phead;
q = phead;
char *ptr;
int cnt = 0;
while(1)
{
if(p == NULL) break;
if(p != NULL)
{
ptr = strstr(p->data.sname,*Sur);
cnt++;
}
printf("姓%s的学生人数为%d",ptr,cnt);
p = p->next ;
}
}
//查询学生专业人数
void queryDept(Node_s *phead)
{
Node_s *p = NULL;
Node_s *q = NULL;
p = phead;
q = phead;
char dept1[]="CS";
char dept2[]="MA";
int s1,s2;
while(1)
{
if(p == NULL) break;
if(p != NULL)
{
if( p->data.Dept[100] == dept1[3])
{
s1++;
}
if(p->data.Dept[100] == dept2[3])
{
s2++;
}
}
p = p->next ;
}
printf("****************************************************\n");
printf("* *\n");
printf("* CS人数为:%d *\n",s1);
printf("* *\n");
printf("* MA人数为:%d *\n",s2);
printf("* *\n");
printf("****************************************************\n");
system("pause");
}
//学生人数统计
int count(Node_s *phead)
{
int count = 0;
Node_s *p;
p = phead;
while(1)
{
if(p == NULL) break;
if(p!= NULL)
{
count++;
}
p = p->next ;
}
return count ;
}