/*
/*
数据结构设计要求:
1、学生信息(struct student)用链表表示;
2、系信息(struct department)用结构数组表示;
*/
/*功能要求
1. 录入学生信息
2. 显示所有学生信息
3. 按学号查询学生信息
4. 按姓名查询学生信息(支持模糊查询)
5. 按年龄查询学生信息
6. 查询指定学生的所在系的信息(包括系名、系主任、系的办公地点)
7. 修改学生信息
8. 删除学生信息
9. 追加学生信息
10. 保存学生信息到文件
11. 从文件载入学生信息
12. 按成绩从高到低显示所有学生信息[选作题目]
0. 退出系统
*/
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "math.h"
#include "string.h"
struct student /*学生信息*/
{
char num[20]; /*学号*/
char name[20]; /*姓名*/
char sex; /* 性别,'1'->男, '0'->女*/
short age; /*年龄*/
short score[3]; /*三门课程的成绩*/
short sum; /*总成绩*/
short deptid; /*所在系的系号*/
struct student *next;
};
struct department /*系信息,假设总共有3个系*/
{
short id; /*系号*/
char name[20]; /*系名*/
char dean[20]; /*系主任*/
char location[30]; /*系的办公地点*/
};
struct department dp[3]={
{1,"艺术设计系","宋俊杰","办公楼104"},{2,"食工系","王英","办公楼105"},{3,"法政系","王凡","办公楼106"}};
int currentNumOfstu=0;
/*录入学生的信息*/
struct student *create()
{
struct student *p, *q, *head=NULL;
int k, currentNumOfstu=1,i;
short sum;
char tmp[20],str[3];
printf("输入学生的个数:");
gets(tmp);
k=atoi(tmp);
while(k)
{
p=(struct student*)malloc(sizeof(struct student));
printf("\n=======请输入第%d个结点的信息=======\n", currentNumOfstu);
printf("学号:");
gets(p->num);
printf("姓名:");
gets(p->name);
printf("性别,男(1),女(0):");
p->sex=getchar();
getchar();
printf("年龄:");
gets(str);
p->age=atoi(str);
sum=0;
for(i=0;i<3;i++)
{
printf("课程%d的成绩(整数):",i+1);
gets(str);
p->score[i]=atoi(str);
sum=sum+p->score[i];
}
p->sum=sum;
printf("系号(1或2或3):");
gets(str);
p->deptid=atoi(str);
if(currentNumOfstu==1)
head=p;
else
q->next=p;
q=p;
p->next=NULL;
k--;
currentNumOfstu++;
}
printf("\n录入完毕,");
return head;
}
/*显示所有学生信息*/
void display(struct student *p)
{
if(p==NULL)
printf("没有学生的信息\n");
else
{
printf("\n=========================学生的信息内容如下=========================");
printf("\n学号\t姓名\t性别\t年龄\t课程1\t课程2\t课程3\t总成绩\t系号\n");
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n", p->num, p->name,p->sex=='1'?"男":"女",p->age,p->score[0],p->score[1],p->score[2],p->sum,p->deptid);
p=p->next;
}
}
printf("\n显示完毕,");
}
/*按学号查询学生信息*/
struct student *displayOnnum(struct student *head)
{
struct student *p, *q;
char x[30];
if(head==NULL)