#include "stdio.h"/*I/O函数*/
#include "stdlib.h" /*其它说明*/
#include "string.h" /*字符串函数*/
#include "conio.h" /*屏幕操作函数*/
#include "mem.h" /*内存操作函数*/
#include "ctype.h" /*字符操作函数*/
#include "alloc.h" /*动态地址分配函数*/
struct score
{
int mingci
char xuehao[8]
char mingzi[20]
float score[6]
}data,info[1000]
int i,j,k=0
char temp[20],ch
FILE *fp,*fp1
void shuru()
{
if((fp=fopen("s_score.txt","ab+"))==NULL)
{
printf("cannot open this file.\n")
getch()exit(0)
}
for(i=0i<=1000i++)
{
printf("\nPlease shuru xuehao:")
gets(data.xuehao)
printf("Please shuru mingzi:")
gets(data.mingzi)
printf("Please shuru yuwen score:")
gets(temp)data.score[0]=atof(temp)
printf("Please shuru shuxue score:")
gets(temp)data.score[1]=atof(temp)
printf("Please input yingyu score:")
gets(temp)data.score[2]=atof(temp)
printf("Please shuru wuli score:")
gets(temp)data.score[3]=atof(temp)
printf("Please shur huaxue score:")
gets(temp)data.score[4]=atof(temp)
data.score[5]=data.score[0]+data.score[1]+data.score[2]+data.score[3]+data.score[4]
fwrite(&data,sizeof(data),1,fp)
printf("another?y/n")
ch=getch()
if(ch=='n'||ch=='N')
break
} fclose(fp)
}
void xianshi()
{
float sint n
if((fp=fopen("s_score.txt","rb+"))==NULL)
{
printf("Cannot reading this file.\n")
exit(0)
}
for(i=0i<=1000i++)
{
if((fread(&info[i],sizeof(info[i]),1,fp))!=1)
break
}
printf("\nxuehao mingzi yuwen shuxue yingyu wuli huauxue zhongfen\n")
for(j=0,k=1j<ij++,k++)
{
info[j].mingci=k
printf("%6s %8s %3.1f %3.1f%3.1f%3.1f%3.1f %3.1f\n",info[j].xuehao,info[j].mingzi,info[j].score[0],info[j].score[1],info[j].score[2],info[j].score[3],info[j].score[4],
info[j].score[5])
}
getch()
fclose(fp)
}
void xiugai()
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)
{
printf("Cannot open this file.\n")
exit(0)
}
printf("\nPLease shuru xiugai xuehao:")
scanf("%d",&i)getchar()
while((fread(&data,sizeof(data),1,fp))==1)
{
j=atoi(data.xuehao)
if(j==i)
{
printf("xuehao:%s\nmingzi:%s\n",data.xuehao,data.mingzi)
printf("Please shuru mingzi:")
gets(data.mingzi)
printf("Please shuru yuwen score:")
gets(temp)data.score[0]=atof(temp)
printf("Please shuru shuxue score:")
gets(temp)data.score[1]=atof(temp)
printf("Please input yingyu score:")
gets(temp)data.score[2]=atof(temp)
printf("Please input wuli score:")
gets(temp)data.score[3]=atof(temp)
printf("Please input huaxue score:")
gets(temp)data.score[4]=atof(temp)
data.score[5]=data.score[0]+data.score[1]+data.score[2]+data.score[3]+data.score[4]
} fwrite(&data,sizeof(data),1,fp1)
}
fseek(fp,0L,0)
fseek(fp1,0L,0)
while((fread(&data,sizeof(data),1,fp1))==1)
{
fwrite(&data,sizeof(data),1,fp)
}
fclose(fp)
fclose(fp1)
}
void chazhao()
{
if((fp=fopen("s_score.txt","rb"))==NULL)
{
printf("\nCannot open this file.\n")
exit(0)
}
printf("\nPLease shuru xuehao chakan:")
scanf("%d",&i)
while(fread(&data,sizeof(data),1,fp)==1)
{
j=atoi(data.xuehao)
if(i==j)
{
printf("xuehao:%s mingzi:%s\nyuwen:%f\n shuxue:%f\n yingyu:%f\n wuli:%f\n huaxue:%f\n ",data.xuehao,data.mingzi,data.score[0],data.score[1],data.score[2],data.score[3],data.score[4],data.score[5])
}getch()
}
}
void shanchu()
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)
{
printf("\nopen score.txt was failed!")
getch()
exit(0)
}
printf("\nPlease input ID which you want to del:")
scanf("%d",&i)getchar()
while((fread(&data,sizeof(data),1,fp))==1)
{
j=atoi(data.xuehao)
if(j==i)
{
printf("Anykey will delet it.\n")
getch()
continue
}
fwrite(&data,sizeof(data),1,fp1)
}
fclose(fp)
fclose(fp1)
remove("s_score.txt")
rename("temp.txt","s_score.txt")
printf("Data delet was succesful!\n")
printf("Anykey will return to main.")
getch()
}
main()
{
while(1)
{
clrscr()/*清屏幕*/
gotoxy(1,1)/*移动光标*/
textcolor(YELLOW) /*设置文本显示颜色为黄色*/
textbackground(BLUE) /*设置背景颜色为蓝色*/
window(1,1,99,99) /* 制作显示菜单的窗口,大小根据菜单条数设计*/
clrscr()
printf("*************welcome to use student manage******************\n")
printf("*************************menu********************************\n")
printf("* ========================================================= * \n")
printf("* 1>shuru2>xiugai * \n")
printf("* 3>shanchu 4>chazhao* \n")
printf("* 5>xianshi 6>exit * \n")
printf("* * \n")
printf("* --------------------------------------------------------- * \n")
printf(" Please input which you want(1-6):")
ch=getch()
switch(ch)
{
case '1':shuru()break
case '2':xiugai()break
case '3':shanchu() break
case '4':chazhao()break
case '5':xianshi() break
case '6':exit(0)
default: continue
}
}
/*好吧,其实你可以上网看看,那么多的,你可以自己修改下*/#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)
}