#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
char name[20]
long int num
char sex[4]
int age
char address[30]
double tele_num
char aihao[20]
struct student *next
}//定义一个结构题
int TOTAL_NUM = 0//学生总数
struct student *head = NULL
void welcome ()//欢迎界面
void mainmenu ()//主界面
void record ()//记录数据
void insert(struct student *stu)//插入数据
void display(struct student *stu)//显示一个学生的信息
void displayAll ()//显示所有学生的信息
void query_by_num ()//按学号查询学生信息
void readData ()//读取文件里学生的信息
void writeData ()//向文件写入学生信息
void freeAll ()//清空链表内容
void del ()//删除学生信息
void change ()//更改学生信息
void devise (struct student *p)//选择更改内容
int main (void)
{
welcome ()
//显示主菜单
mainmenu ()
return 0
}
//显示欢迎信息
void welcome ()
{
printf ("+----------------------------------------------------+\n")
printf ("||\n")
printf ("| 欢迎使用网络工程学院信息安全092班学生信息管理系统 |\n")
printf ("||\n")
printf ("+----------------------------------------------------+\n")
}
//系统主菜单
void mainmenu ()
{
int choice
choice = -1
readData ()
printf ("\n温馨提示:为保证您的 *** 作得到保存,请按正常顺序退出系统^_^\n")
do
{
printf ("\n\n\n")
printf ("\t\t\t--------------------------------------------\n")
printf ("\t\t\t+信息安全092班学生信息管理系统 |\n")
printf ("\t\t\t--------------------------------------------\n")
printf ("\t\t\t+[1]----录入学生信息|\n")
printf ("\t\t\t+[2]----浏览学生信息|\n")
printf ("\t\t\t+[3]----查询学生信息|\n")
printf ("\t\t\t+[4]----删除学生信息|\n")
printf ("\t\t\t+[5]----修改学生信息|\n")
printf ("\t\t\t+[0]----退出系统|\n")
printf ("\t\t\t+*·*·*·*·*·*·*·*·*·*·*·*·*·*·*|\n")
printf ("\t\t\t--------------------------------------------\n")
printf ("请输入您的选择:")
scanf ("%d", &choice)
switch (choice)
{
case 0:
writeData ()
freeAll ()
exit (0)
case 1:
record ()
break
case 2:
displayAll ()
break
case 3:
query_by_num ()
break
case 4:
del ()
break
case 5:
change ()
break
default:
printf ("\n无效选项!")
break
}
}
while (choice != 0)
}
//录入学生信息
void record ()
{
struct student *p0
p0 = (struct student *)malloc(LEN)
printf ("请输入学生的姓名:")
scanf ("%s",p0->name)
printf ("请输入学生的学号:")
scanf ("%ld",&p0->num)
printf ("请输入学生的性别:")
scanf ("%s",p0->sex)
printf ("请输入学生的年龄:")
scanf ("%d",&p0->age)
printf ("请输入学生的地址:")
scanf ("%s",p0->address)
printf ("请输入学生的电话:")
scanf ("%lf",&p0->tele_num)
printf ("请输入学生的爱好:")
scanf ("%s",p0->aihao)
insert (p0)
printf ("该学生的信息为:\n")
printf ("-------------------------------------------------------------------------------\n")
printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n")
display (p0)
}
void insert (struct student *stu)
{
struct student *p0, *p1, *p2
p1 = head
p0 = stu
if (head == NULL)
{
head = p0
p0->next = NULL
}
else
{
while ((p0->num >p1->num)&&(p1->next != NULL))
{
p2 = p1
p1 = p1->next
}
if (p0->num <= p1->num)
{
if (head == p1)
head = p0
else
p2->next = p0
p0->next = p1
}
else
{
p1->next = p0
p0->next = NULL
}
}
TOTAL_NUM++
}
void display (struct student *p)
{
printf ("%s\t%ld\t%d\t%s\t%s\t\t%.0f\t%s\n", p->name, p->num, p->age, p->sex, p->address, p->tele_num, p->aihao)
}
//浏览学生信息
void displayAll()
{
struct student *p
printf("学生总数:%d\n", TOTAL_NUM)
p = head
if (head != NULL)
{
printf("\n姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n")
printf("-------------------------------------------------------------------------------\n")
do
{
display(p)
p = p->next
}
while(p != NULL)
}
printf ("\n")
}
//按学号查询学生信息
void query_by_num ()
{
int num
struct student *p1
printf("请输入学生的学号:")
scanf("%ld", &num)
if(head==NULL)
{
printf("无学生记录!\n")
return
}
p1 = head
while (num!=p1->num &&p1->next!=NULL)
p1 = p1->next
if (num == p1->num)
{
printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n")
printf ("-------------------------------------------------------------------------------\n")
display (p1)
}
else
printf ("没有该学生记录,请核对!")
}
//写入文件
void writeData ()
{
FILE* fp//文件指针
struct student *p
fp = fopen("1.txt", "w")
if (!fp)
{
printf("文件打开错误!")
return
}
fprintf(fp,"%d\n", TOTAL_NUM)
for(p = headp!= NULLp= p->next)
{
fprintf(fp,"%s\t%ld\t%s\t%d\t%s\t%.0f\t%s\n", p->name, p->num, p->sex, p->age, p->address, p->tele_num, p->aihao)
}
fclose (fp)
}
void freeAll ()
{
struct student *p1, *p2
p1 = p2=head
while(p1)
{
p2=p1->next
free (p1)
p1 = p2
}
}
//读取文件
void readData ()
{
FILE* fp//文件指针
struct student *p1, *p2
fp = fopen("1.txt", "r")
if (!fp)
{
printf("文件打开错误!")
return
}
fscanf(fp,"%d\n", &TOTAL_NUM)
head = p1 = p2 = (struct student *)malloc(LEN)
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao)
while(!feof(fp))
{
p1 = (struct student *)malloc(LEN)
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao)
p2->next = p1
p2 = p1
}
p2->next = NULL
fclose(fp)
}
//删除学生信息
void del ()
{
struct student *p1, *p2
long int num
if (head == NULL)
{
printf("无学生记录!\n")
return
}
printf("请输入您要删除的学生的学号:")
scanf("%ld", &num)
p1 = head
while (num != p1->num &&p1->next != NULL)
{
p2 = p1
p1 = p1->next
}
if(num == p1->num)
{
if(p1 == head)
head = p1->next
else p2->next = p1->next
free(p1)
TOTAL_NUM--
}
else
printf("没有该学生记录,请核对!\n")
}
//修改学生信息
void change ()
{
struct student *p1, *p2
long int num
if (head == NULL)
{
printf ("无学生记录!\n")
return
}
printf ("请输入您要修改的学生的学号:")
scanf ("%ld", &num)
p1 = head
while (num != p1->num &&p1->next != NULL)
{
p2 = p1
p1 = p1->next
}
if(num == p1->num)
devise (p1)
else
printf("没有该学生记录,请核对!\n")
}
void devise (struct student *p)
{
int choice
choice = -1
do
{
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("| 取消 请按 0 |\n")
printf("+----------------------+\n")
printf("请输入您的选择:")
scanf("%d", &choice)
switch (choice)
{
case 0:
return
case 1:
printf("请输入新姓名:")
scanf("%s", p->name)
break
case 2:
printf("请输入新学号:")
scanf("%d", &p->num)
break
case 3:
printf("请输入新性别:")
scanf("%s", p->sex)
break
case 4:
printf("请输入新年龄:")
scanf("%s", &p->age)
break
case 5:
printf("请输入新地址:")
scanf("%s", p->address)
break
case 6:
printf("请输入新电话:")
scanf("%lf", &p->tele_num)
break
case 7:
printf("请输入新爱好:")
scanf("%s", p->aihao)
break
default:
printf("\n无效选项!")
break
}
}
while(choice != 0)
}
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#define M 3
typedef struct node
{
char sno[20]
char name[20]
int score[M]
double avg
struct node *next
}linklist
int listlength(linklist*head)
void output1(linklist*head)
void output2(linklist*head)
linklist *create()
{
linklist *head,*p,*t
int n,i,j
printf("请输入学生人数:")
scanf("%d",&n)
head=(linklist*)malloc(sizeof(linklist))
t=head
for(i=0i<ni++)
{
p=(linklist*)malloc(sizeof(linklist))
printf("输入学号:")
scanf("%s",p->sno)
printf("输入姓名:")
scanf("%s",p->name)
printf("输入%d门功课成绩:",M)
for(j=0j<Mj++)
scanf("%d",&p->score[j])
printf("\n")
t->next=p
t=p
}
p->next=NULL
return head
}
void insert(linklist*head)
{
linklist *p
int i,n,j
printf("输入你要插入的学生人数:")
scanf("%d",&n)
printf("你要插入的学生信息:\n")
for(i=0i<ni++)
{p=(linklist*)malloc(sizeof(linklist))
p->next=head->next
head->next=p
printf("输入学号:")
scanf("%s",p->sno)
printf("输入姓名:")
scanf("%s",p->name)
printf("输入%d门功课成绩:",M)
for(j=0j<Mj++)
scanf("%d",&p->score[j])
}
}
void del(linklist*head)
{
linklist *p,*q
char s[20]
printf("输入要删除学生的姓名:")
scanf("%s",s)
q=head
p=head->next
while(strcmp(p->name,s)!=0&&p)
{ q=p
p=p->next}
if(p==NULL)
printf("无此人\n")
else
{ q->next=p->next
free(p)}
}
void change(linklist*head)
{
linklist*p//修改学生信息模块!
int i,a[M]//M=3
char s[20]//存放学生姓名的数组!
printf("输入你要修改数据的学生姓名:")
scanf("%s",s)
p=head->next
while(strcmp(p->name,s)!=0&&p)//遍历链表
p=p->next
if(p==NULL)
printf("无此人\n")
else
{ printf("%s\t%s\t",p->sno,p->name)
printf("请重新输入学生的%d门成绩:",M)
for(i=0i<Mi++)
{ scanf("%d",&a[i])
p->score[i]=a[i]}
}
}
void sort(linklist*head)
{ double sum//用学生的平均分进行排序!
linklist *p,*q,*t
int i,j
double temp
int m=listlength(head)//求出链表长度的函数!(因为链表长度有变化所以写了这个函数)
q=p=head->next
for(i=0i<mi++)
{
sum=0
for(j=0j<Mj++)//求出学生M门功课的成绩平均分
sum+=q->score[j]
p->avg=sum/M
p=p->next
q=p
}
output2(head)
p=head->next
printf("有不及格科目的学生:\n")
for(i=0i<mi++)
{ for(j=0j<Mj++)
if(p->score[j]<60)
{ printf("%s\t%s\t",p->sno,p->name)
for(j=0j<Mj++)
printf("%d ",p->score[j])
printf("\n")
}
p=p->next
}
printf("\n")
printf("学生成绩排序:\n")
t=NULL
while(t!=head->next)
{
p=head
q=p->next
while(q->next!=t)
{
if(p->next->avg<q->next->avg)
{
p->next=q->next
q->next=q->next->next
p->next->next=q
}
p=p->next
q=p->next
}
t=q
}
}
int listlength(linklist*head)
{
int n=0
linklist*p
p=head->next
while(p)
{n++
p=p->next
}
return n
}
int menu()
{
int m,i
printf("============================================================\n")
printf("||1:录入学生数据 2:增加学生数据 ||\n")
printf("||3:删除学生数据 4:改正学生数据 ||\n")
printf("||5:排序 6:退出。 ||\n")
printf("||=========================================================\n")
printf("输入你要选择的功能:")
i=scanf("%d",&m)
system("cls")
fflush(stdin)
return m
}
void output1(linklist*head)
{
linklist*p
int i
p=head->next
while(p)
{
printf("%s\t%s\t",p->sno,p->name)
for(i=0i<Mi++)
printf("%d ",p->score[i])
p=p->next
printf("\n")
}
}
void output2(linklist*head)
{
linklist*p
int i
p=head->next
while(p)
{
printf("%s\t%s\t",p->sno,p->name)
for(i=0i<Mi++)
printf("%d ",p->score[i])
printf("%lf",p->avg)
p=p->next
printf("\n")
}
}
int main(void)
{
linklist*p
int k=0
do
{
k=menu()
switch(k)
{
case 1:
p=create()
output1(p)break
case 2:insert(p)
output1(p)break
case 3:del(p)
output1(p)break
case 4:change(p)
output1(p)break
case 5:sort(p)
output2(p)break
case 6:exit(0)
}
}while(k>=1&&k<=6)
return 0
}
功能有点不同!但可以用!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)