您的位置:首页 > 理论基础 > 数据结构算法

数据结构课程设计 建立一个学生管理系统,以单链表的形式存储,学生信息包括学号,姓名,年龄,出勤,奖励惩罚,电话号码

2018-01-30 15:52 761 查看
#include <stdio.h>

#include <stdlib.h>

#include<string.h>

#define MAC 1000

#define INCR 100

typedef struct Student{ 
int Id;
char name[20];
int age;
char phonenum[20];
int ChuQin;//出勤 
int reward;//奖励 
int penaty;//惩罚 

}Student;

typedef struct Lnode {
Student data;
struct Lnode *next;

}Lnode,*LinkList;

void CreatLinkList(LinkList &L){//存放学生信息的建立单链表 并将其存至文件 Student.txt
int n;
FILE *fp;

fp=fopen("Student.txt","aw");
fprintf(fp,"学生人数: %d \n录入每人的基本信息后 :\n",n);
fclose(fp);
printf("请输入学生的人数:\n");
scanf("%d",&n);
Student stu
;
LinkList pre,p;
L=(Lnode *)malloc(sizeof(Lnode));
pre=L;
printf("请输入学生的相关信息:\n");
printf("学号
姓名 年龄 出勤
奖励 惩罚
电话号码 \n");
for(int i=0;i<n;i++){
p=(LinkList)malloc(sizeof(Lnode));
scanf("%d",&p->data.Id);
getchar();
scanf("%s",p->data.name);
getchar();
scanf("%d%d%d%d%s",&p->data.age,&p->data.ChuQin,&p->data.reward,&p->data.penaty,p->data.phonenum);
pre->next=p;
pre=p;

}
pre->next=NULL;

}

void Output(LinkList L){//输出学生信息并将每次的输出结果存至文件Student.txt 
printf("输出学生信息:\n");
LinkList pre;
pre=L->next;
while(pre){
printf("%d\t",pre->data.Id);
printf("%s\t",pre->data.name);
printf("%d\t%d\t%d\t%d\t%s",pre->data.age,pre->data.ChuQin,pre->data.reward,pre->data.penaty,pre->data.phonenum);

pre=pre->next;
printf("\n");
}

    FILE *fp;

    fp=fopen("Student.txt","aw");

    fprintf(fp,"学生信息为:\n");
while(pre){
fprintf(fp,"%d\t",pre->data.Id);
fprintf(fp,"%s\t",pre->data.name);
fprintf(fp,"%d\t%d\t%d\t%d\t",pre->data.age,pre->data.ChuQin,pre->data.reward,pre->data.penaty);
pre=pre->next;
}
fprintf(fp,"\n");
fclose(fp);

}

void Delet(LinkList &L){//删除其中一个人员
int num;
FILE *fp;
fp=fopen("Student.txt","aw");
fprintf(fp,"要删除的学生学号: %d\n",num);
fclose(fp);
LinkList p,q;
printf("输入要删除人员的学号:\n");
scanf("%d",&num);
p=L;
q=p;//让q记住p并且q一直在p的前面 
p=p->next;
while(p){
if(p->data.Id==num){
q->next=p->next;//
free(p);
break;
}
p=p->next;
q=q->next;
}

}

void Search(LinkList L){//查找一个学生并输出他的信息 
int num; 
FILE *fp;

printf("请输入要输入要查询人员的学号:\n");
scanf("%d",&num);
fp=fopen("Student.txt","aw");
fprintf(fp,"要查询的学生学号: %d\n",num); 
LinkList p;
p=L->next;
while(p){
if(p->data.Id==num){//当这个结点的数据域里的学号与输入的一致时,就终止程序输出这个结点的其他信息 
printf("%d\t",p->data.Id); 
printf("%s\t",p->data.name);
printf("%d\t%d\t%d\t%d\t%s",p->data.age,p->data.ChuQin,p->data.reward,p->data.penaty,p->data.phonenum);
break;
}
p=p->next;

if(p){
fprintf(fp,"该学生信息为:\n");
fprintf(fp,"该学生信息为:\n");
fprintf(fp,"学号: %d",p->data.Id);
fprintf(fp,"姓名: %s",p->data.name);

fprintf(fp,"电话: %d",p->data.phonenum);
fprintf(fp,"年龄: %d",p->data.age); 
fprintf(fp,"考勤: %d",p->data.ChuQin);

fprintf(fp,"奖励: %d\n",p->data.reward);

fprintf(fp,"惩罚: %d\n",p->data.penaty);



}

void SortId(LinkList &L){//按照学号进行插入排序
LinkList p,q,r,s;
p=L->next;//指向链表的第一个结点 
while(p->next){//遍历链表 
q=p->next;
if(q->data.Id<p->data.Id){
r=L;//指向原链表的头结点 
s=L->next;
while(s!=p && s->data.Id < q->data.Id){ 
r=s;//记录前驱结点 
s=s->next;//继续遍历 
}
p->next=q->next;//交换结点 
q->next=s;
r->next=q;
}
else{
p=p->next;
}
}

}

int main(){
LinkList L;
CreatLinkList(L);
SortId(L);
Output(L);
Delet(L);
Output(L);
Search(L);
printf("\n");
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐