前言(我又来了:)
1.大一作业,我学习C语言的第一个比较大(对当时的本菜鸡来说)的程序。
2.发出来是因为可能对一些自学的人有帮助,不建议(我也管不了 :……(,不过我这种水平写的垃圾应该也不会被)充当ctrlCV素材。
3.学完东西多练习,这样提高的快而且走的稳。(除非实在是不喜欢)
main.cpp
#include<stdio.h>
#include<stdlib.h>
void jieMain();//欢迎界面
void menu();//菜单
void init();//初始化输入
void print();//初始化输出
void addStudent();//添加学生记录
void modifyStu();//修改学生成绩
void qno();//按学号查询学生信息
void qname();//按姓名查询学生信息
void sortStu();//按总成绩从大到小排序
void delStu();//删除学生记录
void sortStuNum();//按学号从大到小排序
void data();//数据还原
void output();//结果存入文件
void input();//从文件中读取学生信息
void visitorMenu();//访客菜单
struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
int ren=0;
int main()
{
jieMain();//欢迎界面
//menu();//菜单
//system("pause");
return 0;
}
jieMain.cpp
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Rvisitor();
void Wvisitor(int t);
void menu();
void visitorMenu();
void jieMain()
{
char user[20],pad[20];
char use[20]="admin";//{'a','d','m','i','n'};
char pwd[20]="123456";//{1,2,3,4,5,6};
int num=1,i=0;
printf("\n");
printf(" -------------------------------------------------------------\n");
printf(" | |\n");
printf(" | |\n");
printf(" | 欢 迎 使 用 学 生 成 绩 管 理 系 统 |\n");
printf(" | |\n");
printf(" | |\n");
printf(" -------------------------------------------------------------\n");
printf("\n");
printf(" 请输入您的账号:");//虚假的用户检验 &^)
scanf("%s",&user);
if(strcmp(user,use)==0)
{
while(i<3)
{
printf("\n");
printf(" 请输入您的密码:(输入三次0可退出程序)");
scanf("%s",&pad);
if(strcmp(pad,pwd)==0){
printf("\n");
printf(" 欢迎你,管理员 :)\n");
printf("\n");
system("color 1f");
system("pause");
system("cls");
menu();
}else{
i++;
}
}
}else{
printf("\n");
num=Rvisitor();
printf(" %s 您好!您是第%d号访问者\n",user,num);
num++;
Wvisitor(num);
printf("\n");
system("color 1f");
system("pause");
system("cls");
visitorMenu();
}
}
int Rvisitor()
{
FILE *fp;
int t;
if((fp=fopen("F:\\作业\\学生成绩管理系统\\访客.txt","r"))==NULL)
printf("找不到文件\n");
fscanf(fp,"%d\n",&t);//写入访问量
fclose(fp);
return t;
}
void Wvisitor(int t)
{
FILE *fp;
if((fp=fopen("F:\\作业\\学生成绩管理系统\\访客.txt","w"))==NULL)
printf("找不到文件\n");
fprintf(fp,"%d\n",t);
fclose(fp);
}
menu.cpp
#include<stdio.h>
#include<stdlib.h>
void init();
void addStudent();
void modifyStu();
void qno();
void qname();
void sortStu();
void delStu();
void sortStuNum();
void print();
void output();
void input();
void menu()
{
system("color 0f");
while(1)
{
int num,a;
printf("\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(" | 8.结果存入文件(成绩.txt) |\n");
printf(" | 9.从文件中读取学生信息(学生信息.txt) |\n");
printf(" | 0.退出程序 |\n");
printf(" ------------------------------------------------------\n");
printf("\n");
printf(" 请输入您的选择,<1,2,3,4,5,6,7,8,9,0>:");
scanf(" %d",&num);
printf("\n");
switch(num)
{
case 1:system("pause");system("cls");system("color 0f");
printf("\n 初始化\n");init();break;
case 2:system("pause");system("cls");system("color 0f");
printf("\n 添加学生信息\n");addStudent();break;
case 3:system("pause");system("cls");system("color 0f");
printf("\n 删除学生信息\n");delStu();break;
case 4:system("pause");system("cls");system("color 0f");
printf("\n");
printf(" ----选择----------------------------------------\n");
printf(" | 1.按姓名查询学生信息 |\n");
printf(" | 2.按学号查询学生信息 |\n");
printf(" ------------------------------------------------\n");
printf("\n");
printf(" 请输入您的选择:");
scanf(" %d",&a);
while(a<1||a>2)
{
system("color 04");
printf(" 错误\n 请重新输入:");
scanf("%d",&a);
}
switch(a)
{
case 1:system("color 0f");
qname();break;
case 2:system("color 0f");
qno();break;
}break;
case 5:system("pause");system("cls");system("color 0f");
printf("\n 修改学生信息\n");modifyStu();break;
case 6:system("pause");system("cls");system("color 0f");
printf("\n");
printf(" ----选择----------------------------------------\n");
printf(" | 1.按总分排名 |\n");
printf(" | 2.按学号排名 |\n");
printf(" ------------------------------------------------\n");
printf("\n");
printf(" 请输入您的选择:");
scanf(" %d",&a);
while(a<1||a>2)
{
system("color 04");
printf(" 错误\n 请重新输入:");
scanf("%d",&a);
}
switch(a)
{
case 1:system("color 0f");sortStu();break;
case 2:system("color 0f");sortStuNum();break;
}break;
case 7:system("pause");system("cls");system("color 0f");
printf("\n 查看学生信息库\n");print();system("pause");system("cls");break;
case 8:system("pause");system("cls");system("color 0f");
printf("\n 结果存入文件\n");output();system("pause");system("cls");break;
case 9:system("pause");system("cls");system("color 0f");
printf("\n 从文件中读取学生信息\n");input();system("pause");system("cls");break;
case 0:printf("\n 结束\n");
printf("\n 谢 谢 使 用!\n\n");
system("color 70");break;
default:system("color 04");printf("\n 错误\n");break;
}
if(num==0)
{
return;
}
}
}
addStudent.cpp
#include<stdio.h>
#include<stdlib.h>
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
extern int ren;
extern void print();
struct student gete();
void addStudent()
{
struct student e,*q,*p;
int i;
e=gete();//要插入的学生相关信息
print();
printf("\n 请输入要插入的地址:");
scanf("%d",&i);
while(i<1||i>ren+1)//若输入的数字不在已有序列中
{
printf("\n 请输入正确的地址:");
scanf("%d",&i);
}
q=&(stu[i-1]);//取地址
for(p=&stu[ren-1];p>=q;p--)
*(p+1)=*p;
*q=e;
ren++;
printf("\n");
print();//输出学生的相关信息
system("pause");
system("cls");
}
data.cpp
#include<stdio.h>
#include<stdlib.h>
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
extern int ren;
extern void print();
struct student gete();
void addStudent()
{
struct student e,*q,*p;
int i;
e=gete();//要插入的学生相关信息
print();
printf("\n 请输入要插入的地址:");
scanf("%d",&i);
while(i<1||i>ren+1)//若输入的数字不在已有序列中
{
printf("\n 请输入正确的地址:");
scanf("%d",&i);
}
q=&(stu[i-1]);//取地址
for(p=&stu[ren-1];p>=q;p--)
*(p+1)=*p;
*q=e;
ren++;
printf("\n");
print();//输出学生的相关信息
system("pause");
system("cls");
}
delStu.cpp
#include<stdio.h>
#include<stdlib.h>
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
extern int ren;
void print();
void data();
void menu();
struct student e;
struct student ku[100];struct student *p,*q;
int dat=0;
void delStu()
{
int i,a;
printf("\n");
print();
printf("\n 请输入要删除的地址:(输入0查看已删除的学生信息)");
scanf("%d",&i);
if(i!=0){
while(i<1||i>ren)
{
system("color 04");
printf(" 输入错误\n 请重新输入:");
scanf("%d",&i);
}
system("color 0f");
e=stu[i-1];
q=&(stu[i-1]);
for(p=&stu[i];p<&stu[ren];p++)
*(p-1)=*p;
ren--;
print();
}
printf(" -----选择---------------------------------------\n");
printf(" | 1.返回菜单 |\n");
printf(" | 2.查看已删除的学生信息 |\n");
printf(" ------------------------------------------------\n");
printf(" 请输入您的选择:");
scanf("%d",&a);
while(a<1||a>2)
{
system("color 04");
printf(" 错误\n 请重新输入:");
scanf("%d",&a);
}
system("color 0f");
switch(a)
{
case 1:system("pause");system("cls");menu();break;
case 2:system("pause");system("cls");data();break;
}
}
gete.cpp
#include<stdio.h>
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
struct student gete()
{
int i;
struct student e;
printf("\n 请输入学号:");
scanf("%ld",&e.num);
printf(" 请输入姓名:");
scanf("%s",&e.name);
e.add=0;
for(i=0;i<3;i++)
{
if(i==0)printf(" 请输入数学成绩:");
if(i==1)printf(" 请输入语文成绩:");
if(i==2)printf(" 请输入英语成绩:");
scanf("%lf",&e.score[i]);
e.add+=e.score[i];
}
return e;
}
init.cpp
#include<stdio.h>
#include<stdlib.h>
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
extern int ren;
void print();
void init()
{
while(1)
{
printf("\n 请输入学号(若数据已全部输入完成,则输入0.):");
scanf("%ld",&stu[ren].num);
if(stu[ren].num==0)break;
printf(" 请输入姓名:");
scanf("%s",&stu[ren].name);
printf(" 请输入三门成绩:\n");
stu[ren].add=0;
for(int j=0;j<3;j++)
{
if(j==0){
printf(" 数学:");
}
if(j==1){
printf(" 语文:");
}
if(j==2){
printf(" 英语:");
}
scanf("%lf",&stu[ren].score[j]);
stu[ren].add+=stu[ren].score[j];
}
ren++;
}
print();
system("pause");
system("cls");
}
input.cpp
#include<stdio.h>
#include<string.h>
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
extern int ren;
void print();
void input()
{
FILE *fp;
int i=0, flag;
if((fp=fopen("F:\\作业\\学生成绩管理系统\\学生信息.txt","r"))==NULL)//记得改成自己需要的路径
{
printf("不能打开文件,文件读取失败!\n");
return;
}
while(1)
{
flag=fscanf(fp, "%ld %s ",&stu[i].num,stu[i].name);
for(int k=0;k<3;k++)
fscanf(fp," %lf ",&stu[i].score[k]);
fscanf(fp,"%lf",&stu[i].add);
if(flag == EOF)
break;
i++;
}
ren=ren+i;
printf("\n 从文件中成功读取%d条记录!\n\n",i);
fclose(fp);
print();
}
modifyStu.cpp
#include<stdio.h>
#include<stdlib.h>
void print();
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
extern int ren;
void modifyStu()
{
long i;
int j,k,h,x;//i:要修改学生的学号;k:要修改的学生信息
print();
printf("\n 请输入所要修改学生的学号:");
scanf("%ld",&i);
for(x=0;x<ren;x++)
{
if(i==stu[x].num)
{
printf(" 该学生的位置为%d\n",x+1);
printf("\t学号\t\t姓名\t数学\t语文\t英语\t总分\n");
printf("\t%ld\t%s\t",stu[x].num,stu[x].name);
for(j=0;j<3;j++)
printf("%.2lf\t",stu[x].score[j]);
printf("%.2lf\n",stu[x].add);
printf("\n -----选择---------------------------------------\n");
printf(" | 1.修改学号 |\n");
printf(" | 2.修改姓名 |\n");
printf(" | 3.修改数学成绩 |\n");
printf(" | 4.修改语文成绩 |\n");
printf(" | 5.修改英语成绩 |\n");
printf(" | 0.结束 |\n");
printf(" ------------------------------------------------\n");
printf(" 请选择要修改的学生信息:");
scanf("%d",&k);
switch(k)
{
case 1:
{
printf("\n 您要修改的是:学号\n");
printf(" 请输入新的学号:");
scanf("%ld",&stu[x].num);
break;
}
case 2:
{
printf("\n 您要修改的是:姓名 \n");
printf(" 请输入新的姓名:");
scanf("%s",&stu[x].name);
break;
}
case 3:
{
printf("\n 您要修改的是:数学成绩 \n");
printf(" 请输入新的数学成绩:");
scanf("%lf",&stu[x].score[0]);
break;
}
case 4:
{
printf("\n 您要修改的是:语文成绩\n");
printf(" 请输入新的语文成绩:");
scanf("%lf",&stu[x].score[1]);
break;
}
case 5:
{
printf("\n 您要修改的是:英语成绩 \n");
printf(" 请输入新的英语成绩:");
scanf("%lf",&stu[x].score[2]);
break;
}
case 0:printf("\n 您选择的是:结束\n"); break;
default :system("color 04");printf("\n 错误\n"); break;
}
printf("\n\t学号\t\t姓名\t语文\t数学\t英语\t总分\n");
printf("\t%ld\t%s\t",stu[x].num,stu[x].name);
stu[x].add=0;
for(h=0;h<3;h++)
{
printf("%.2lf\t",stu[x].score[h]);
stu[x].add+=stu[x].score[h];
}
printf("%.2lf\n",stu[x].add);
system("pause");
system("cls");
break;
}
}
}
output.cpp
#include<stdio.h>
#include<string.h>
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
extern int ren;
void output()
{
FILE *fp;
fp=fopen("F:\\作业\\学生成绩管理系统\\成绩.txt","w");//记得改成自己需要的路径
fprintf(fp,"\t学生记录:\n");
fprintf(fp,"\t学号\t\t姓名\t数学\t语文\t英语\t总成绩\n");
for(int j=0;j<ren;j++)
{
fprintf(fp,"\t%ld\t%s\t",stu[j].num,stu[j].name);
for(int k=0;k<3;k++)
fprintf(fp,"%.2lf\t",stu[j].score[k]);
fprintf(fp,"%.2lf\n",stu[j].add);
}
fclose(fp);
printf("\n\n*******************恭喜,保存完成!*******************\n\n");
}
print.cpp
#include<stdio.h>
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
extern int ren;
void print()
{
int j=0;
printf("\n 学生记录:\n");
printf("\t学号\t\t姓名\t数学\t语文\t英语\t总成绩\n");
for(;j<ren;j++)
{
printf("\t%ld\t%s\t",stu[j].num,stu[j].name);
for(int k=0;k<3;k++)
printf("%.2lf\t",stu[j].score[k]);
printf("%.2lf\n",stu[j].add);
}
if(j=0)printf("学生信息为空!");
printf("\n");
}
qname.cpp
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
extern int ren;
void qname()
{
char nam[20];
int k,a;
printf("\n 请输入要查询学生信息的学生的姓名:");
scanf("%s",&nam);
for(k=0;k<ren;k++)
{
a=strcmp(nam,stu[k].name);
if(a==0)
{
printf("\n 学生记录如下:\n");
printf("\t学号\t\t姓名\t数学\t语文\t英语\t总成绩\n");
printf("\t%ld\t%s\t",stu[k].num,stu[k].name);
for(int j=0;j<3;j++)
printf("%.2lf\t",stu[k].score[j]);
printf("%.2lf\n",stu[k].add);
printf("\n");break;
}
if(a!=0&&k==ren-1)
printf(" 查询无此结果\n");
}
system("pause");
system("cls");
}
qno.cpp
#include<stdio.h>
#include<stdlib.h>
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
extern int ren;
void qno()
{
long i,k;
printf("\n 请输入要查询学生信息的学生的学号:");
scanf("%ld",&i);
for(k=0;k<ren;k++)
{
if(stu[k].num==i)
{
printf("\n 学生记录如下:\n");
printf("\t学号\t\t姓名\t数学\t语文\t英语\t总成绩\n");
printf("\t%ld\t%s\t",stu[k].num,stu[k].name);
for(int j=0;j<3;j++)
printf("%.2lf\t",stu[k].score[j]);
printf("%.2lf\n",stu[k].add);
printf("\n");break;
}
if(k==ren-1&&stu[k].num!=i)
printf(" 查询无此结果\n");
}
system("pause");
system("cls");
}
sortStu.cpp
#include<stdio.h>
#include<stdlib.h>
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
extern int ren;
void qno()
{
long i,k;
printf("\n 请输入要查询学生信息的学生的学号:");
scanf("%ld",&i);
for(k=0;k<ren;k++)
{
if(stu[k].num==i)
{
printf("\n 学生记录如下:\n");
printf("\t学号\t\t姓名\t数学\t语文\t英语\t总成绩\n");
printf("\t%ld\t%s\t",stu[k].num,stu[k].name);
for(int j=0;j<3;j++)
printf("%.2lf\t",stu[k].score[j]);
printf("%.2lf\n",stu[k].add);
printf("\n");break;
}
if(k==ren-1&&stu[k].num!=i)
printf(" 查询无此结果\n");
}
system("pause");
system("cls");
}
sortStuNum.cpp
#include<stdio.h>
#include<stdlib.h>
void print();
extern struct student{
long num;
char name[20];
double score[3];
double add;
}stu[100];
extern int ren;
void sortStuNum()
{
printf("\n 排序结果为(从小到大):\n");
struct student *p,*q,e;
int i,j;
long a,b;
for(i=0;i<ren;i++)
{
for(j=i+1;j<ren;j++)
{
a=stu[i].num;
b=stu[j].num;
if(a>b)
{
p=&stu[i];
q=&stu[j];
e=*p;
*p=*q;
*q=e;
}
}
}
print();
system("pause");
system("cls");
}
visitorMenu.cpp
#include<stdio.h>
#include<stdlib.h>
void qno();
void qname();
void sortStu();
void sortStuNum();
void print();
void visitorMenu()
{
system("color 0f");
while(1)
{
int num,a;
printf("\n");
printf(" |----菜单--------------------------------------------|\n");
printf(" | 1.查询学生信息 |\n");
printf(" | 2.排名 |\n");
printf(" | 0.退出程序 |\n");
printf(" ------------------------------------------------------\n");
printf("\n");
printf(" 请输入您的选择,<1,2,3,4,5,6,7,8,9,0>:");
scanf(" %d",&num);
printf("\n");
switch(num)
{
case 1:system("pause");system("cls");system("color 0f");
printf("\n");
printf(" ----选择----------------------------------------\n");
printf(" | 1.按姓名查询学生信息 |\n");
printf(" | 2.按学号查询学生信息 |\n");
printf(" ------------------------------------------------\n");
printf("\n");
printf(" 请输入您的选择:");
scanf(" %d",&a);
while(a<1||a>2)
{
system("color 04");
printf(" 错误\n 请重新输入:");
scanf("%d",&a);
}
switch(a)
{
case 1:system("color 0f");
qname();break;
case 2:system("color 0f");
qno();break;
}break;
case 2:system("pause");system("cls");system("color 0f");
printf("\n");
printf(" ----选择----------------------------------------\n");
printf(" | 1.按总分排名 |\n");
printf(" | 2.按学号排名 |\n");
printf(" ------------------------------------------------\n");
printf("\n");
printf(" 请输入您的选择:");
scanf(" %d",&a);
while(a<1||a>2)
{
system("color 04");
printf(" 错误\n 请重新输入:");
scanf("%d",&a);
}
switch(a)
{
case 1:system("color 0f");sortStu();break;
case 2:system("color 0f");sortStuNum();break;
}break;
case 0:printf("\n 结束\n");
printf("\n 谢 谢 使 用!\n\n");
system("color 70");break;
default:system("color 04");printf("\n 错误\n");break;
}
if(num==0)
break;
}
}
ends