/*************************************************************************
> File Name: StudentManagementSystem.c
> Created Time: 2014年03月09日 星期日 10时02分05秒
************************************************************************/
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
typedef struct //定义学生成绩表中数据元素类型
{
char num[13]; //学号
char name[8]; //姓名
char classname[5]; //专业班级
int score; //成绩
} ElemType; //学生信息
typedef struct
{
ElemType elem[MAXSIZE]; //存储各学生信息的数组
int length; //学生数
}SqList; //顺序表,存储学生列表
void InitList(SqList *L) //初始化顺序表
{
L->length=0; //空表,长度为0
}
void CreateSeqList(SqList *L)
/*从文件读取数据,构建顺序表*/
{
FILE *fp;
int i=0;
fp=fopen("D:\\StudentInfo.txt","r");
/*数据文件所在的路径,即当前数据文件StudentInfo.txt所在位置*/
if(!fp)
printf("\nCan not open file!\n"); //数据文件无法打开
else
{
while(!feof(fp))
{
fscanf(fp,"%s %s %s %d",L->elem[i].num,
L->elem[i].name,L->elem[i].classname,&(L->elem[i].score));
L->length++;
i++;
}
L->length--;
/*L->length减1后才是顺序表的真正长度*/
}
}
void FWrite(SqList L) //把顺序表中的数据写回到文件里
{
FILE *fp;
int i=0;
fp=fopen("D:\\StudentInfo.txt","w");
if(!fp)
printf("\nCan not open file!\n"); //数据文件无法打开
else
{
while(i<L.length)
{
fprintf(fp,"%s %s %s %d\n",L.elem[i].num,L.elem[i].name,
L.elem[i].classname,L.elem[i].score);
i++;
}
}
}
void OutPut(SqList L) //输出顺序表
{
int i;
printf("\n学号\t\t姓名\t专业班级\t成绩\n");
for(i=0;i<L.length-1;i++)
printf("%s\t%s\t%s\t%d\n",L.elem[i].num,L.elem[i].name,
L.elem[i].classname,L.elem[i].score);
printf("\n数据输出完毕!");
}
int Insert(SqList *L,int i,ElemType x)
/*将新节点x插入顺序表L的第i个位置上*/
{
int j;
if(L->length==MAXSIZE)
{
printf("表满,溢出!");
return FALSE;
}
else if(i<1||i>L->length)
{
printf("插入位置不合法!");
return FALSE;
}
else{for(j=L->length-1;j>=i-1;j--)
L->elem[j+1]=L->elem[j]; //结点后移
L->elem[i-1]=x; //插入x
L->length++; //表长加1
return TRUE;
}
}
int Delete(SqList *L,int i)
/*从顺序表中删除第i 个位置上的结点*/
{
int j;
if(L->length==0)
{
printf("表为空,无法删除!");
return FALSE;
}
else if(i<1||i>L->length)
{
printf("删除位置不合法!");
return FALSE;
}
else{
for(j=i;j<=L->length-1;j++)
L->elem[j-1]=L->elem[j]; //结点前移
L->length--; //表长减1
return TRUE;
}
}
int Locate(SqList L, char number[12]) //在顺序表中查找一个值为number 的结点
{
int i;
for(i=0;i<L.length;i++)
if(strcmp(L.elem[i].num,number)==0)
return(i+1);
if(i>=L.length)
{printf("找不到该值!");
return FALSE;
}
}
int main()
{
SqList Student;
ElemType e;
char number[13],yn;
int n,loc;
InitList(&Student);
while(1)
{
fflush(stdin);
system("cls");
printf("\n");
printf("******学生成绩管理系统********\n");
printf("******1-输出所有学生信息*******\n");
printf("******2-按学号查询学生信息*****\n");
printf("******3-修改学生数据**********\n");
printf("******4-添加一个学生信息**********\n");
printf("******5-删除一个学生信息***********\n");
printf("******0-退出系统**********\n");
printf("******************************\n");
printf("请选择(Select):");
switch(getche())
{
case '1': //输出所有学生信息
OutPut(Student);
break;
case '2': //按学号查询学生信息
printf("\n请输入待查询学生的学号:");
gets(number);
loc=Locate(Student,number);
if(loc)
{
printf("\n找到,该学生信息为:");
printf("\n 学号\t 姓名\t专业班级\t成绩\n");
printf("%S\t%s\t%s\t%d\n",Student.elem[loc-1].num,
Student.elem[loc-1].name,Student.elem[loc-1].classname,
Student.elem[loc-1].score);
}
else printf("\n该学号的学生信息不存在!\n");
break;
case '3': //修改学生数据
printf("\n请输入待修改的学生的学号:");
gets(number);
loc=Locate(Student,number);
if(!loc)
printf("\n该学号的学生信息不存在!");
else{
printf("\n找到,该学生信息为:");
printf("\n学号\t\t姓名\t专业班级\t成绩\n");
printf("%s\t%s\t%s\t%d\n",Student.elem[loc-1].num,
Student.elem[loc-1].name,Student.elem[loc-1].classname,
Student.elem[loc-1].score);
printf("\n修改学生信息为:");
printf("\n学号:");scanf("%s",Student.elem[loc-1].num);
printf("\n姓名:");scanf("%s",Student.elem[loc-1].name);
printf("\n 专业班级:");scanf("%s",Student.elem[loc-1].classname);
printf("\n成绩:");scanf("%s",Student.elem[loc-1].score);
FWrite(Student);
puts("\n修改数据成功!");
}
break;
case '4': //添加一个学生信息
printf("\n请输入待插入学生的信息:");
printf("\n学号: ");scanf("%s",e.num);
printf("\n姓名: ");scanf("%s",e.name);
printf("\n专业:");scanf("%s",e.classname);
printf("\n成绩:");scanf("%s",&e.score);
printf("\n请输入插入位置(1~%d):",Student.length);
scanf("%d",&loc);
Insert(&Student,loc,e);
FWrite(Student);
puts("\n添加数据成功!");
break;
case '5': //删除一个学生信息
printf("\n请输入待删除的学生的学号:");
gets(number);
loc=Locate(Student,number);
if(loc)
{
printf("\n找到,该学生信息为:");
printf("\n 学号\t\t 姓名\t专业班级\t 成绩\n");
printf("%s\t%s\t%s\t%d\n",Student.elem[loc-1].num,Student.elem[loc-1].name,
Student.elem[loc-1].classname,Student.elem[loc-1].score);
printf("\n确定是否删除:(Y/N)");
yn=getchar();
if((yn=='Y'||yn=='y'))
{
Delete(&Student,loc);
FWrite(Student);
puts("\n删除数据成功!");
}
}
else printf("\n该学号的学生信息不存在!");
break;
case '0': // 退出系统
printf("\n感谢使用本学生成绩管理系统!\n");
return 0;
}
puts("\n按任意键返回!\n");
getche();
}
}
> File Name: StudentManagementSystem.c
> Created Time: 2014年03月09日 星期日 10时02分05秒
************************************************************************/
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
typedef struct //定义学生成绩表中数据元素类型
{
char num[13]; //学号
char name[8]; //姓名
char classname[5]; //专业班级
int score; //成绩
} ElemType; //学生信息
typedef struct
{
ElemType elem[MAXSIZE]; //存储各学生信息的数组
int length; //学生数
}SqList; //顺序表,存储学生列表
void InitList(SqList *L) //初始化顺序表
{
L->length=0; //空表,长度为0
}
void CreateSeqList(SqList *L)
/*从文件读取数据,构建顺序表*/
{
FILE *fp;
int i=0;
fp=fopen("D:\\StudentInfo.txt","r");
/*数据文件所在的路径,即当前数据文件StudentInfo.txt所在位置*/
if(!fp)
printf("\nCan not open file!\n"); //数据文件无法打开
else
{
while(!feof(fp))
{
fscanf(fp,"%s %s %s %d",L->elem[i].num,
L->elem[i].name,L->elem[i].classname,&(L->elem[i].score));
L->length++;
i++;
}
L->length--;
/*L->length减1后才是顺序表的真正长度*/
}
}
void FWrite(SqList L) //把顺序表中的数据写回到文件里
{
FILE *fp;
int i=0;
fp=fopen("D:\\StudentInfo.txt","w");
if(!fp)
printf("\nCan not open file!\n"); //数据文件无法打开
else
{
while(i<L.length)
{
fprintf(fp,"%s %s %s %d\n",L.elem[i].num,L.elem[i].name,
L.elem[i].classname,L.elem[i].score);
i++;
}
}
}
void OutPut(SqList L) //输出顺序表
{
int i;
printf("\n学号\t\t姓名\t专业班级\t成绩\n");
for(i=0;i<L.length-1;i++)
printf("%s\t%s\t%s\t%d\n",L.elem[i].num,L.elem[i].name,
L.elem[i].classname,L.elem[i].score);
printf("\n数据输出完毕!");
}
int Insert(SqList *L,int i,ElemType x)
/*将新节点x插入顺序表L的第i个位置上*/
{
int j;
if(L->length==MAXSIZE)
{
printf("表满,溢出!");
return FALSE;
}
else if(i<1||i>L->length)
{
printf("插入位置不合法!");
return FALSE;
}
else{for(j=L->length-1;j>=i-1;j--)
L->elem[j+1]=L->elem[j]; //结点后移
L->elem[i-1]=x; //插入x
L->length++; //表长加1
return TRUE;
}
}
int Delete(SqList *L,int i)
/*从顺序表中删除第i 个位置上的结点*/
{
int j;
if(L->length==0)
{
printf("表为空,无法删除!");
return FALSE;
}
else if(i<1||i>L->length)
{
printf("删除位置不合法!");
return FALSE;
}
else{
for(j=i;j<=L->length-1;j++)
L->elem[j-1]=L->elem[j]; //结点前移
L->length--; //表长减1
return TRUE;
}
}
int Locate(SqList L, char number[12]) //在顺序表中查找一个值为number 的结点
{
int i;
for(i=0;i<L.length;i++)
if(strcmp(L.elem[i].num,number)==0)
return(i+1);
if(i>=L.length)
{printf("找不到该值!");
return FALSE;
}
}
int main()
{
SqList Student;
ElemType e;
char number[13],yn;
int n,loc;
InitList(&Student);
while(1)
{
fflush(stdin);
system("cls");
printf("\n");
printf("******学生成绩管理系统********\n");
printf("******1-输出所有学生信息*******\n");
printf("******2-按学号查询学生信息*****\n");
printf("******3-修改学生数据**********\n");
printf("******4-添加一个学生信息**********\n");
printf("******5-删除一个学生信息***********\n");
printf("******0-退出系统**********\n");
printf("******************************\n");
printf("请选择(Select):");
switch(getche())
{
case '1': //输出所有学生信息
OutPut(Student);
break;
case '2': //按学号查询学生信息
printf("\n请输入待查询学生的学号:");
gets(number);
loc=Locate(Student,number);
if(loc)
{
printf("\n找到,该学生信息为:");
printf("\n 学号\t 姓名\t专业班级\t成绩\n");
printf("%S\t%s\t%s\t%d\n",Student.elem[loc-1].num,
Student.elem[loc-1].name,Student.elem[loc-1].classname,
Student.elem[loc-1].score);
}
else printf("\n该学号的学生信息不存在!\n");
break;
case '3': //修改学生数据
printf("\n请输入待修改的学生的学号:");
gets(number);
loc=Locate(Student,number);
if(!loc)
printf("\n该学号的学生信息不存在!");
else{
printf("\n找到,该学生信息为:");
printf("\n学号\t\t姓名\t专业班级\t成绩\n");
printf("%s\t%s\t%s\t%d\n",Student.elem[loc-1].num,
Student.elem[loc-1].name,Student.elem[loc-1].classname,
Student.elem[loc-1].score);
printf("\n修改学生信息为:");
printf("\n学号:");scanf("%s",Student.elem[loc-1].num);
printf("\n姓名:");scanf("%s",Student.elem[loc-1].name);
printf("\n 专业班级:");scanf("%s",Student.elem[loc-1].classname);
printf("\n成绩:");scanf("%s",Student.elem[loc-1].score);
FWrite(Student);
puts("\n修改数据成功!");
}
break;
case '4': //添加一个学生信息
printf("\n请输入待插入学生的信息:");
printf("\n学号: ");scanf("%s",e.num);
printf("\n姓名: ");scanf("%s",e.name);
printf("\n专业:");scanf("%s",e.classname);
printf("\n成绩:");scanf("%s",&e.score);
printf("\n请输入插入位置(1~%d):",Student.length);
scanf("%d",&loc);
Insert(&Student,loc,e);
FWrite(Student);
puts("\n添加数据成功!");
break;
case '5': //删除一个学生信息
printf("\n请输入待删除的学生的学号:");
gets(number);
loc=Locate(Student,number);
if(loc)
{
printf("\n找到,该学生信息为:");
printf("\n 学号\t\t 姓名\t专业班级\t 成绩\n");
printf("%s\t%s\t%s\t%d\n",Student.elem[loc-1].num,Student.elem[loc-1].name,
Student.elem[loc-1].classname,Student.elem[loc-1].score);
printf("\n确定是否删除:(Y/N)");
yn=getchar();
if((yn=='Y'||yn=='y'))
{
Delete(&Student,loc);
FWrite(Student);
puts("\n删除数据成功!");
}
}
else printf("\n该学号的学生信息不存在!");
break;
case '0': // 退出系统
printf("\n感谢使用本学生成绩管理系统!\n");
return 0;
}
puts("\n按任意键返回!\n");
getche();
}
}