(C)学生成绩管理系统

时间:2023-03-09 18:30:29
(C)学生成绩管理系统
 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h> struct Student
{
char id[];
char name[];
int score;
}; typedef struct User
{
char userName[];
char userPassword[];
}UserInfo; void inputNameAndPassword();
void logon();
void creatDataBace();
void selectServe();
void checkAchievement();
void addAchievement();
void delectAchievement();
void changeAchievement();
void sortAchievement();
void start(); int main(int argc, const char * argv[])
{
start();
//清屏未实现
system("clear"); FILE *file;
file=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt", "r+");
struct Student aStudent;
if (fread(&aStudent, sizeof(struct Student), , file)==) {
creatDataBace();
}
fclose(file);
//清屏未实现 selectServe(); return ;
} void start()
{
int land;
printf("1.注册\n2.登陆\n");
scanf("%d",&land);
if (land==) {
logon();
}else
{
if (land==)
inputNameAndPassword();
else
{
printf("输入有误,请重新选择\n");
start();
}
}
} void logon()
{
UserInfo userInput;
printf("\n------------------注册用户------------------");
printf("\n请输入注册用户名:");
scanf("%s",userInput.userName);
printf("请输入密码:");
scanf("%s",userInput.userPassword);
FILE *fp;
if((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/user_password.txt", "a+"))==NULL)
{
printf("注册失败!");
exit();
}
if ((fwrite(&userInput, sizeof(UserInfo), , fp))!=) {
printf("注册失败!");
exit();
}
fclose(fp);
inputNameAndPassword();
} void inputNameAndPassword()
{
UserInfo userInput,userBase[];
int i=,count=,chance=; FILE *fp;
if((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/user_password.txt", "r"))==NULL)
{
printf("登陆失败!");
exit();
} while(fread(&userBase[i], sizeof(UserInfo), , fp)!=)
i++;
count=i;
fclose(fp); printf("\n------------------用户登陆------------------\n");
while ()
{
printf("用户名:");
scanf("%s",userInput.userName);
printf("密码:");
scanf("%s",userInput.userPassword); //密码用星号代替未实现 for (i=; i<count; i++) {
if((strcmp(userInput.userName, userBase[i].userName)==)&&(strcmp(userInput.userPassword, userBase[i].userPassword)==))
return;
}
if (chance!=)
printf("\n用户名或密码输入错误,请重新输入(还有 %d 次机会):\n",-chance);
chance++;
if (chance>=) {
printf("\n尝试超出次数!退出程序。");
exit();
}
}
} void selectServe()
{
int serveNumber;
printf("\n------------------操作菜单------------------");
printf("\n1.查询学生成绩\n2.添加学生成绩\n3.删除学生成绩\n4.修改学生成绩\n5.查看成绩排名\n");
printf("\n请选择您需要的操作(输入序号选择,输入其它退出程序):");
scanf("%d",&serveNumber);
switch (serveNumber) {
case :
checkAchievement();
break;
case :
addAchievement();
break;
case :
delectAchievement();
break;
case :
changeAchievement();
break;
case :
sortAchievement();
break;
default:
break;
}
printf("\n ^^ 再见.....");
} void creatDataBace()
{
FILE *fp;
struct Student student[];
int flag=;
int i=;
int k=;
int count=;
int m=;
char ch; if((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt", "r"))==NULL)
{
printf("打开文件错误!");
exit();
} for (i=;fread(&student[i], sizeof(struct Student), , fp)!=;i++);
count=i;
fclose(fp); printf("\n------------------初始化数据库------------------");
i=;
while () {
printf("\n请输入学生的基本信息:\n");
do
{
printf("第 %d 个学生的ID号:",i+);
scanf("%s",student[i].id); for (k=i-; k>=; k--) {
if(strcmp(student[i].id, student[k].id)==)
{
printf("\nID号已存在,请重新输入\n");
flag=;
break;
}
} for (k=; k<count; k++) {
if(strcmp(student[i].id, student[k].id)==)
{
printf("\nID号在整个数据库中已存在,请重新输入\n");
flag=;
break;
}
}
}while(flag); do
{
flag=;
printf("学生名称:");
scanf("%s",student[i].name);
}while (flag); do
{
flag=;
printf("学生成绩:");
scanf("%d",&student[i].score);
if (student[i].score>||student[i].score<) {
flag=;
continue;
}
}while (flag); i++;
m++;
printf("\n是否继续创建学生成绩信息?输入'y'或'Y'继续,输入其它进入下一步:");
getchar();
scanf("%c",&ch);
if (ch!='Y'&&ch!='y')
break;
} if((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt", "a"))==NULL)
{
printf("打开文件错误!");
exit();
} for (i=; i<m; i++) {
if (fwrite(&student[i], sizeof(struct Student), , fp)!=)
printf("数据保存失败");
} fclose(fp);
} void checkAchievement()
{
struct Student student;
char id[];
FILE *fp; printf("\n------------------查询学生成绩------------------\n");
printf("请输入需要查询的学生ID:");
scanf("%s",id);
while ()
{
if ((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt","r"))==NULL)
{
printf("打开文件错误!");
selectServe();
} while (fread(&student, sizeof(struct Student), , fp)!=) {
if (strcmp(id,student.id)==) {
printf("ID:%s 姓名:%s 分数:%d\n",student.id,student.name,student.score);
break;
}
} if (strcmp(id,student.id)!=)
printf("没查找到ID为 %s 的学生信息。\n",id); printf("\n请输入需要查询的学生ID(输入n返回操作菜单):");
scanf("%s",id);
if (strcmp(id,"n")==||strcmp(id,"N")==) {
fclose(fp);
selectServe();
}
fclose(fp);
}
} void addAchievement()
{
FILE *fp;
struct Student student[];
int i=;
int count=;
char ch; if((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt", "r"))==NULL)
{
printf("打开文件错误!");
selectServe();
} for (i=;fread(&student[i], sizeof(struct Student), , fp)!=;i++);
count=i;
fclose(fp); if((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt", "a+"))==NULL)
{
printf("打开文件错误!");
selectServe();
} printf("\n------------------添加学生成绩------------------");
while ()
{
int flag;
do {
flag=;
printf("\n请输入需要添加的学生ID:");
scanf("%s",student[count].id);
for (int k=; k<count; k++) {
if(strcmp(student[count].id, student[k].id)==)
{
printf("ID号在数据库中已存在,请重新输入。\n");
flag=;
break;
}
}
} while (flag);
printf("请输入需要添加的学生姓名:");
scanf("%s",student[count].name);
printf("请输入需要添加的学生分数:");
scanf("%d",&student[count].score);
if (fwrite(&student[count], sizeof(struct Student), , fp)!=) {
printf("添加失败!");
}
printf("添加成功!\n");
printf("\n是否继续添加学生成绩信息?输入y继续,输入其它返回操作菜单:");
getchar();
scanf("%c",&ch);
if (ch!='y'&&ch!='Y') {
fclose(fp);
selectServe();
}
count++;
}
} void delectAchievement()
{
char id[];
char sure;
FILE *infile,*outfile;
struct Student students[];
int i=,flag=-,count=; printf("\n------------------删除学生成绩------------------"); if ((infile=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt","r"))==NULL)
{
printf("打开文件错误!");
selectServe();
} while (fread(&students[i], sizeof(struct Student), , infile)!=) i++;
count=i;
fclose(infile); printf("\n请输入需要删除的学生ID:");
scanf("%s",id);
while ()
{
for (i=; i<count; i++) {
if (strcmp(id,students[i].id)==) {
flag=i;
break;
}
} if (flag==-)
printf("没查找到ID为 %s 的学生信息。",id);
else
{
printf("确认要删除ID为 %s 的学生信息吗?(y确定 n取消)",id);
getchar();
scanf("%c",&sure);
if (sure=='y')
{
for (i=flag; i<count-; i++) {
students[i]=students[i+];
}
count--; outfile=fopen("/Users/5000/Desktop/C:OC作业/Final Project/temp.txt","w+");
for (i=; i<count; i++) {
if(fwrite(&students[i], sizeof(struct Student), , outfile)!=)
{
printf("删除失败!");
selectServe();
}
}
fclose(outfile);
}
printf("删除成功!\n");
} printf("\n请输入需要删除的学生ID(输入n返回操作菜单):");
scanf("%s",id); if (strcmp(id,"n")==||strcmp(id,"N")==) {
/*其实用w打开原来文件就可以直接写入原来的文件,w打开会清空原来文件的内容*/
unlink("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt");//#include <unistd.h>
rename( "/Users/5000/Desktop/C:OC作业/Final Project/temp.txt","/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt");//#include <unistd.h>
selectServe();
}
}
} void changeAchievement()
{
FILE *fp;
char id[],ch;
int score=,count=,flag=;
int i=;
struct Student students[]; if ((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt","r"))==NULL)
{
printf("打开文件错误!");
selectServe();
}
while (fread(&students[i], sizeof(struct Student), , fp)!=) i++;
count=i;
fclose(fp); printf("\n------------------学生成绩排名------------------\n");
while ()
{
printf("请输入需要修改成绩的学生ID:");
scanf("%s",id); for (i=;i<count;i++) {
if (strcmp(id,students[i].id)==) {
printf("ID为 %s 的%s同学,分数为:%d\n",students[i].id,students[i].name,students[i].score);
printf("更改%s同学的分数值为:",students[i].name);
scanf("%d",&score);
students[i].score=score;
flag=;
break;
}
} if (flag)
printf("没查找到ID为 %s 的学生信息。\n",id); if ((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt","w+"))==NULL)
{
printf("打开文件错误!");
selectServe();
}
for (i=; i<count; i++) {
if(fwrite(&students[i], sizeof(struct Student), , fp)!=)
{
printf("修改失败!");
selectServe();
}
} printf("\n是否继续查询学生成绩信息?输入'y'或'Y'继续,输入其它返回操作菜单:");
getchar();
scanf("%c",&ch);
if (ch!='y'&&ch!='Y') {
fclose(fp);
selectServe();
}
}
} void sortAchievement()
{
char ch;
FILE *fp;
struct Student students[],temp;
int i=,j=,count=; if ((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt","r"))==NULL)
{
printf("打开文件错误!");
selectServe();
} while (fread(&students[i], sizeof(struct Student), , fp)!=) i++;
fclose(fp);
count=i; printf("\n------------------学生成绩排名------------------\n");
for(i=;i<count-;i++)
for(j=;j<count--i;j++)
{
if (students[j].score<students[j+].score) {
temp=students[j];
students[j]=students[j+];
students[j+]=temp;
}
}
printf("ID Name Score\n"); //Id****Name******Score
for (i=; i<count; i++) {
printf("%s",students[i].id);
for (j=; j<-strlen(students[i].id); j++)
printf(" "); printf("%s",students[i].name);
for (j=; j<-strlen(students[i].name); j++)
printf(" "); printf("%d\n",students[i].score);
} printf("\n输入任意键返回操作菜单:");
getchar(); //接收选择操作4时输入的回车
scanf("%c",&ch);
selectServe(); }

运行截图:

(C)学生成绩管理系统
(C)学生成绩管理系统
(C)学生成绩管理系统
(C)学生成绩管理系统
(C)学生成绩管理系统