You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

448 lines
11 KiB

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
//结构体定义
typedef struct Node{
int id;//学号
char name[100];//名
char sex[10];//性别
int ch,ma,en;//语数英
int sum;//总分
//指针域
struct Node *next;
}node;
node List;//连表
//文件读取
int readFile(node *L);
void printfAddStuInfo();//界面
void insertStuInfo(node *L,node e);//功能
//主页面--菜单
void welcome();
//退出程序
void goodBye();
//删除学生信息
void deleteStuInfo(node *pr);
//打印删除学生信息
void printDeleteStuInfo(node *L);
//修改学生信息
void printFixStuInfo(node *L);
//按姓名进行查找
node * searchStuInfoByName(char name[],node *L);
//按学号进行查找
node * searchStuInfoById(int id,node *L);
////查询学生信息
void printSearchStuInfo(node *L);
//保存文件
int saveFile(node *L);
//添加功能的实现
void insertStuInfo(node *L,node e);//功能
//增加学生信息
void printAddStuInfo();//输出界面
//输出所有学生信息
void printStuInfo(node *L);
//文件输入
int readFile(Node *L);
//删除
void deletestudentInfo();
//退出
void goodBye();
//查询
void searchstudentInfo();
//输出
void printstudentInfo(node *L);
//添加
void addstudentInfo(node *L);
//修
void fixstudentInfo(node *L);
//查询
void searchstudentInfo(node *L);
//输出
void printstudentInfo(node *L);
//退
void goodBye();
int main(){
int choice = 0;
readFile(&List);
// scanf("%d",&choice);
while(true){
welcome();
scanf("%d",&choice);
switch (choice)
{
case 1://添加
printAddStuInfo();
break;
case 2://删除
printDeleteStuInfo(&List);
break;
case 3://修改
printFixStuInfo(&List);
break;
case 4://查询
printSearchStuInfo(&List);
break;
case 5://输出
printstudentInfo(&List);
break;
case 0://退出
goodBye();
break;
// default:
// break;
}
printf("是否继续操作!!!!(yse:1/no:0)(1/0)\n");
scanf("%d",&choice);
if(choice==0){
break;
}
}
return 0;
}
//主菜单页面
void welcome(){
printf("***********************\n");
printf("*** 学生成绩管理系统 ***\n");
printf("***作者:姜超 刘瑞斌****\n");
printf("***添加学生信息————1****\n");
printf("***删除学生信息————2****\n");
printf("***修改学生信息————3****\n");
printf("***查询学生信息————4****\n");
printf("***输出学生信息————5****\n");
printf("***退出管理系统————0****\n");
printf("**请输入对应数字(0-5)***\n");
}
////添加
//void addstudentInfo(){
// printf("----添加学生信息\n");
//}
////删除
//void deletestudentInfo(){
// printf("----删除学生信息\n");
//}
////修修改
//void fixstudentInfo(){
// printf("----修改学生信息\n");
//}
////查询
//void searchstudentInfo(){
// printf("----查询学生信息\n");
//}
//输出
void printstudentInfo(node *L){
// printf("----输出学生信息\n");
system("cls");
node *p = L->next;
printf("_______________________________________________________");
printf("|学 号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分\t|\n");
printf("_______________________________________________________");
if(p!=NULL){
while(p!=NULL){
printf("%d%s\t|%s\t|%d\t|%d\t|%d\t|%d",p->id,p->name,p->sex,p->ch,p->ma,p->en,p->sum);
printf("______________________________________________________");
p=p->next;
}
}
}
//文件输入
int readFile(Node *L){
FILE *fpr=fopen("studentInfo.txt","r");
node st;
node *s;
node *t=L;
if(fpr==NULL){
return 0;
}else{
while(fscanf(fpr,"%d %s %s %d %d %d %d\n",&st.id,st.name,st.sex,&st.ch,&st.ma,&st.en,&st.sum)!=EOF){
s=(node *)malloc(sizeof(node));
*s = st;
t->next=s;
t=s;
t->next=NULL;
}
}
fclose(fpr);
return 1;
}
//输出所有学生信息
void printStuInfo(node *L){
system("cls");
node *p=L->next;
printf("________________________________________________________\n");
printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分\t|\n");
printf("________________________________________________________\n");
if(p!=NULL){
while(p!=NULL){
printf("%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|\n",p->id,p->name,p->sex,p->ch,p->ma,p->en,p->sum);
printf("________________________________________________________\n");
p=p->next;
}
}
}
//增加学生信息
void printAddStuInfo(){
//
system("cls");
node st;
printf("请输入新增学生相关信息\n");
printf("学号:");
scanf("%d",&st.id);
printf("姓名:");
scanf("%s",st.name);
printf("性别:");
scanf("%s",st.sex);
printf("语文:");
scanf("%d",&st.ch);
printf("数学:");
scanf("%d",&st.ma);
printf("英语:");
scanf("%d",&st.en);
st.sum=st.ch+st.ma+st.en;
insertStuInfo(&List,st);
}
//保存文件
int saveFile(node *L){
FILE *fpw=fopen("studentInfo.txt","w");
if(fpw==NULL) return 0;
node *p=L->next;
while(p!=NULL){
fprintf(fpw,"%d %s %s %d %d %d %d\n",p->id,p->name,p->sex,p->ch,p->ma,p->en,p->sum);
p=p->next;
}
fclose(fpw);//关闭文件指针
return 1;
}
//再在学生信息的增加过程中添加文件数据的保存操作。
void insertStuInfo(node *L,node e){
//头插法
node *h=L;
node *s=(node *)malloc(sizeof(node));
*s=e;
s->next=h->next;
h->next=s;
//保存文件
saveFile(L);
}
////查询学生信息
void printSearchStuInfo(node *L){
system("cls");
int choice=0;
int id;
char name[50];
node *st;
printf("按学号查询----- 1\n");
printf("按姓名查询----- 2\n");
printf("请输入查询方式:");
scanf("%d",&choice);
if(choice == 1){
printf("请输入要查询的学号:");
scanf("%d",&id);
st=searchStuInfoById(id,L);
if(st==NULL){
printf("查无此人!\n");
}else{
st=st->next;
printf("________________________________________________________\n");
printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分\t|\n");
printf("________________________________________________________\n");
printf("%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|\n",st->id,st->name,st->sex,st->ch,st->ma,st->en,st->sum);
printf("________________________________________________________\n");
}
}else if(choice ==2){
printf("请输入要查询的姓名:");
scanf("%s",name);
st=searchStuInfoByName(name,L);
if(st==NULL){
printf("查无此人!\n");
}else{
st=st->next;
printf("________________________________________________________\n");
printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分\t|\n");
printf("________________________________________________________\n");
printf("%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|\n",st->id,st->name,st->sex,st->ch,st->ma,st->en,st->sum);
printf("________________________________________________________\n");
}
}
}
//按学号进行查找
node * searchStuInfoById(int id,node *L){
node *p=L;
while(p->next!=NULL){
if(p->next->id==id){
return p;
}
p=p->next;
}
return NULL;
}
//按姓名进行查找
node * searchStuInfoByName(char name[],node *L){
node *p=L;
while(p->next!=NULL){
if(strcmp(name,p->next->name)==0){
return p;
}
p=p->next;
}
return NULL;
}
//修改学生信息
void printFixStuInfo(node *L){
system("cls");
int id;
int choice=-1;
printf("请输入要查找的学生学号");
scanf("%d",&id);
node *st=searchStuInfoById(id,L);
if(st==NULL){
printf("查无此人!");
return;
}
st=st->next;
while(1){
system("cls");
printf("________________________________________________________\n");
printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分\t|\n");
printf("________________________________________________________\n");
printf("%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|\n",st->id,st->name,st->sex,st->ch,st->ma,st->en,st->sum);
printf("________________________________________________________\n");
printf("修改姓名---- 1\n");
printf("修改性别---- 2\n");
printf("修改语文---- 3\n");
printf("修改数学---- 4\n");
printf("修改英语---- 5\n");
printf("请输入要修改的信息: ");
scanf("%d",&choice);
switch(choice){
case 1:
printf("请输入姓名:");
scanf("%s",st->name);
break;
case 2:
printf("请输入性别:");
scanf("%s",st->sex);
break;
case 3:
printf("请输入语文:");
scanf("%d",&st->ch);
break;
case 4:
printf("请输入数学:");
scanf("%d",&st->ma);
break;
case 5:
printf("请输入英语:");
scanf("%d",&st->en);
break;
}
st->sum=st->ch+st->ma+st->en;
printf("是否继续修改学生信息?y-1 / n-0\n");
scanf("%d",&choice);
if(choice == 0){
break;
}
}
printf("________________________________________________________\n");
printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分\t|\n");
printf("________________________________________________________\n");
printf("%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|\n",st->id,st->name,st->sex,st->ch,st->ma,st->en,st->sum);
printf("________________________________________________________\n");
//保存文件信息
saveFile(L);
}
//打印删除学生信息
void printDeleteStuInfo(node *L){
system("cls");
int id;
node *p;
printf("请输入要查找的学生学号");
scanf("%d",&id);
node *st=searchStuInfoById(id,L);
p=st;
if(st==NULL){
printf("查无此人!");
return;
}
st=st->next;
printf("________________________________________________________\n");
printf("|学号\t|姓名\t|性别\t|语文\t|数学\t|英语\t|总分\t|\n");
printf("________________________________________________________\n");
printf("%d|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|\n",st->id,st->name,st->sex,st->ch,st->ma,st->en,st->sum);
printf("________________________________________________________\n");
deleteStuInfo(p);
saveFile(L);
}
//删除学生信息
void deleteStuInfo(node *pr){
node *s=pr->next;
pr->next=s->next;
s->next=NULL;
free(s);//释放结点空间
}
//退出程序
void goodBye(){
system("cls");
printf("欢迎下次使用~\n");
exit(0);//结束程序
}