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

#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[n];
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;
}

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值