此代码及供参考,可以用来应付学校的C语言课设,用了结构体数组和文件,没有链表,只是一个比较简单的版本。
需要修改或者使用的的话源码自行拿走,写的比较垃圾,大家最好看看就行了。
注释写的比较少,仅供参考!
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
typedef struct stuInformation {
char name[20];
char sex[3];
char stuId[10];
int cScore;
}M;
M list[200]={0};
int count=0;
void showmenu(); //展示菜单栏
void showHead(); //展示列表的头部
void showStudentInformtion(); //展示所有学生的信息
void searchOneStudent(); //通过学生姓名查找某一个学生的信息
void insertStudentInformation(); //在列表中插入某一个学生的信息(左插入)
void addInformation(); //追加学生信息
void deleteStudentInformation(); //通过学生姓名删除某一个学生的信息
void changeStudentInformation(); //对某一个学生的信息进行改变
void rankScore(); //按照成绩对学生进行排序
void readFILE(); //读取文件数据
void saveFILE(); //保存文件数据
void saveFILE() {
FILE *fp;
int index;
fp = fopen("infor.txt","w+");
if(fp == NULL) {
printf("打开文件出错!\n");
getchar();
exit(0);
}
fwrite(&count,sizeof(int),1,fp);
fwrite(list,sizeof(M),count,fp);
fclose(fp);
return;
}
void readFILE() {
FILE *fp;
int n=0;
fp = fopen("infor.txt","a+");
int index;
if(fp == NULL) {
printf("打开文件出错!\n");
getchar();
exit(0);
}
n=fread(&count,sizeof(int),1,fp);
if(n==0) {
count=0;
return;
}else{
fread(list,sizeof(M),count,fp);
}
fclose(fp);
return;
}
void showmenu() {
system("cls");
printf("*----------------------------------------------------*\n");
printf("* 欢迎使用C语言成绩管理系统 *\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("选择操作<0-7> \n");
return;
}
void showHead() {
printf("%-14s%-14s%-14s%-14s\n","姓名",
"性别",
"学号",
"C语言成绩" );
return;
}
void addInformation() {
int index;
int plus=0;
readFILE();
printf("请输入需要录入学生的人数:");
scanf("%d",&plus);
showHead();
for(index = count;index < count+plus;index++) {
scanf("%s%s%s%d",list[index].name,list[index].sex,list[index].stuId,&list[index].cScore);
}
count=count+plus;
getchar();
printf("录入成功!\n");
saveFILE();
printf("按任意键继续!\n");
getchar();
showmenu();
return;
}
void showStudentInformtion() {
int index;
readFILE();
printf("学生信息如下:\n");
showHead();
for(index = 0;index < count;index++) {
printf("%-14s%-14s%-14s%-14d\n",list[index].name,list[index].sex,list[index].stuId,list[index].cScore);
}
getchar();
saveFILE();
printf("按任意键继续!\n");
getchar();
showmenu();
return;
}
void searchOneStudent() {
int index;
int choiceNum;
int flag = 0;
char searchName[20];
char searchStuId[10];
readFILE();
printf("按姓名查找请按1,按学号查找请按2:");
scanf("%d",&choiceNum);
switch(choiceNum) {
case 1:
printf("请输入查询学生的姓名:");
scanf("%s",searchName);
for(index = 0;index < count;index++) {
if(strcmp(list[index].name,searchName) == 0) {
flag = 1;
printf("查询成功,该生信息如下:\n");
showHead();
printf("%-14s%-14s%-14s%-14d\n",list[index].name,list[index].sex,list[index].stuId,list[index].cScore);
}
}
if(flag == 0) {
printf("查询失败,该生信息不存在!\n");
}
getchar();
saveFILE();
printf("按任意键继续!\n");
getchar();
showmenu();
return;
case 2:
printf("请输入查询学生的学号:");
scanf("%s",searchStuId);
for(index = 0;index < count;index++) {
if(strcmp(list[index].stuId,searchStuId) == 0) {
flag = 1;
printf("查询成功,该生信息如下:\n");
showHead();
printf("%-14s%-14s%-14s%-14d\n",list[index].name,list[index].sex,list[index].stuId,list[index].cScore);
}
}
if(flag == 0) {
printf("查询失败,该生信息不存在!\n");
}
getchar();
saveFILE();
printf("按任意键继续!\n");
getchar();
showmenu();
return;
}
}
void insertStudentInformation() {
int index;
int insertNum;
M insertSTI;
readFILE();
printf("请输入要插入学生的信息:\n");
showHead();
scanf("%s%s%s%d",insertSTI.name,insertSTI.sex,insertSTI.stuId,&insertSTI.cScore);
printf("输入需要插入的位置(左插入):\n");
scanf("%d",&insertNum);
insertNum--;
for(index = count;index > insertNum;index--) {
list[index] = list[index-1];
}
list[insertNum] =insertSTI;
count++;
getchar();
printf("插入成功!\n");
saveFILE();
printf("按任意键继续!\n");
getchar();
showmenu();
return;
}
void deleteStudentInformation() {
char deleteName[20];
int index;
int flag = 0;
readFILE();
printf("请输入需要删除学生的名字:\n");
do {
scanf("%s",deleteName);
for(index = 0;index < count;index++) {
if(strcmp(list[index].name,deleteName) == 0) {
flag = 1;
}
}
if(flag == 0) {
printf("输入错误,请重新输入!\n");
}
if(flag == 1)
break;
}while(1);
for(index;index<count-1;index++) {
list[index] = list[index + 1];
}
count--;
getchar();
printf("删除成功!\n");
saveFILE();
printf("按任意键继续!\n");
getchar();
showmenu();
return;
}
void rankScore() {
int index;
int i;
int j;
M temp;
readFILE();
for(i = 0;i < count;i++) {
for(j = 0;j < count - i - 1;j++) {
if(list[j].cScore < list[j + 1].cScore) {
temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
}
}
}
getchar();
printf("排序成功!\n");
saveFILE();
printf("按任意键继续!\n");
getchar();
showmenu();
return;
}
void changeStudentInformation() {
char oldName[20];
int index;
M newInfo;
int flag = 0;
readFILE();
printf("请输入需要修改的学生姓名:\n");
do {
scanf("%s",oldName);
for(index = 0;index < count;index++) {
if(strcmp(list[index].name,oldName) == 0) {
flag = 1;
}
}
if(flag == 0) {
printf("输入错误,请重新输入!\n");
}
if(flag == 1)
break;
}while(1);
printf("请输入新的学生信息:\n");
showHead();
scanf("%s%s%s%d",newInfo.name,newInfo.sex,newInfo.stuId,&newInfo.cScore);
for(index = 0;index < count;index++) {
if(strcmp(list[index].name,oldName) == 0) {
list[index] = newInfo;
}
}
getchar();
printf("修改成功!\n");
saveFILE();
printf("按任意键继续!\n");
getchar();
showmenu();
return;
}
int main() {
showmenu();
int flag;
do {
scanf("%d",&flag);
switch (flag) {
case 1:
addInformation();
break;
case 2:
deleteStudentInformation();
break;
case 3:
changeStudentInformation();
break;
case 4:
searchOneStudent();
break;
case 5:
insertStudentInformation();
break;
case 6:
rankScore();
break;
case 7:
showStudentInformtion();
break;
case 0:
saveFILE();
printf("保存成功,谢谢使用!\n");
break;
default:
printf("输入错误,请重新输入!\n");
}
}while(flag != 0);
return 0;
}