#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _Student{
char name[10];
int age;
int number;
int score;
}Student;
typedef struct _Node{
Student stu;
struct _Node * next;
}Node;
Node * head=NULL;
//1.录入学生信息
void inputStudent()
{
printf("\n请输入学生信息:姓名 学号 年龄 成绩\n");
Node * p;
p=head;
while (head!=NULL&&p->next!=NULL)
{
p=p->next;
}
Node * newnode=(Node *)malloc(sizeof(Node));
newnode->next=NULL;
if(head==NULL)
{
head=newnode;
p=head;
}
else
{
p->next=newnode;
}
scanf("%s %d %d %d",
newnode->stu.name,&newnode->stu.number,&newnode->stu.age,&newnode->stu.score);
printf("\n数据添加成功........\n");
}
//2.打印学生信息
void printStudent()
{
printf("打印所有学生信息\n");
Node *p;
p=head;
while (p!=NULL)
{
printf("学号%d,姓名%s,年龄%d,成绩%d\n",
p->stu.number,p->stu.name,p->stu.age,p->stu.score);
p=p->next;
}
}
//3.保存学生信息
void saveStudent()
{
printf("保存学生信息\n");
Node *p;
p=head;
FILE *fp;
fp=fopen("C:/Users/Administrator/Desktop/students.txt","w");
while(p!=NULL){
fprintf(fp,"%s %d %d %d\n",
p->stu.name,p->stu.number,p->stu.age,p->stu.score);
p=p->next;
}
printf("保存信息成功\n");
fclose(fp);
}
//4.读取学生信息
void readStudent()
{
printf("读取学生信息\n");
Node *p;
Node *newnode;
head=NULL;
FILE *fp;
fp=fopen("C:/Users/Administrator/Desktop/students.txt","r");
if(fp==0)
{
printf("文件打开失败!\n");
}
while(!feof(fp))
{
if((newnode=(Node*)malloc(sizeof(Node)))==NULL)
{
printf("ERROR\n");
fclose(fp);
exit(0);
}
fscanf(fp,"%d %s %d %d\n",
&newnode->stu.number,newnode->stu.name,&newnode->stu.age,&newnode->stu.score);
if(head==NULL)
{
head=newnode;
p=head;
}
else
{
p->next=newnode;
p=newnode;
}
}
p->next=NULL;
printf("读取成功\n");
//printStudent();
fclose(fp);
}
//5.统计学生信息
int countStudent(){
printf("统计学生信息\n");
int count=0;
FILE *fp;
Node *p;
p=head;
fp=fopen("C:/Users/Administrator/Desktop/students.txt","r");
if(fp==0)
{
printf("文件打开失败!\n");
return 0;
}
while (p!=NULL)
{
count++;
p=p->next;
}
printf("共有%d个学生信息.\n",count);
fclose(fp);
return 0;
}
//6.查找学生信息
Student * findStudent(){
printf("查找学生信息\n");
Student stu2;
int num;
FILE *fp;
printf("输入所查找学生的学号:\n");
scanf("%d",&num);
fp=fopen("C:/Users/Administrator/Desktop/students.txt","r");
if(fp==0)
{
printf("文件打开失败!\n");
return 0;
}
while (!feof(fp))
{
fscanf(fp,"%s %d %d %d",
stu2.name,&stu2.number,&stu2.age,&stu2.score);
if(stu2.number==num)
{
printf("学号%d,姓名%s,年龄%d,成绩%d\n",
stu2.number,stu2.name,stu2.age,stu2.score);
break;
}
if(feof(fp))
{
printf("查无此人!\n");
}
}
fclose(fp);
return 0;
}
//7.修改学生信息
void modifyStudent(){
printf("修改学生信息\n");
int num,flag=0;
printf("请输入需要修改学生的学号:\n");
scanf("%d",&num);
readStudent();
Node *p;
p=head;
while(p!=NULL)
{
if(p->stu.number==num)
{
printf("请输入修改后的信息:学号 姓名 年龄 成绩:\n");
scanf("%d %s %d %d",&p->stu.number,p->stu.name,&p->stu.age,&p->stu.score);
flag=1;
break;
}
p=p->next;
}
if(flag==0)
printf("没有该学生的信息\n");
saveStudent();
}
//8.删除学生信息
void deleteStudent()
{
printf("删除学生信息\n");
int num;
FILE *fp;
Node *p;
p=head;
printf("输入所要删除学生的学号:\n");
scanf("%d",&num);
fp=fopen("C:/Users/Administrator/Desktop/students.txt","r");
if(fp==0)
{
printf("文件打开失败!\n");
}
while (p!=NULL)
{
fscanf(fp,"%s %d %d %d",
p->stu.name,&p->stu.number,&p->stu.age,&p->stu.score);
if(p->stu.number==num)
{
free(p);
}
p=p->next;
if(feof(fp))
{
printf("无此人信息!\n");
}
}
saveStudent();
fclose(fp);
}
int main(int argc, const char * argv[])
{
printf("欢迎使用学生信息管理系统\n");
printf("中北镇工作室2013作品V1.0\n");
while (1) {
printf("\n请选择功能列表:\n");
printf("1.录入学生信息\n");
printf("2.打印学生信息\n");
printf("3.保存学生信息\n");
printf("4.读取学生信息\n");
printf("5.统计学生信息\n");
printf("6.查找学生信息\n");
printf("7.修改学生信息\n");
printf("8.删除学生信息\n");
printf("9.退出学生信息\n");
char c;
scanf(" %c",&c);
switch (c) {
case '1':
system("cls");
inputStudent();
break;
case '2':
system("cls");
printStudent();
break;
case '3':
system("cls");
saveStudent();
break;
case '4':
system("cls");
readStudent();
break;
case '5':
system("cls");
countStudent();
break;
case '6':
system("cls");
findStudent();
break;
case '7':
system("cls");
modifyStudent();
break;
case '8':
system("cls");
deleteStudent();
break;
case '9':
case '0':system("cls");
printf("*欢迎下次使用*\n");
return 0;
break;
default:
break;
}
}
return 0;
}