运用C语言的方法来写的,使用了文件。
下面有请同学们欣赏:
主功能页面
main函数
int main() {
int n,v; //选择执行程序
student *head = (student*)malloc(sizeof(student));
head->next = NULL;
do {
Menu();
printf("\t请选择功能:");
n=scanf("%d", &v);
while(n!=1){
while(getchar()!='\n' );
printf("\t警告只能输入数字!选择功能:");
n=scanf("%d", &v);
}
n=v;
switch (n) {
case 1: //添加学生信息
Add(head);
baocun(head);
break;
case 2: //查找学生成绩
Find(head);
break;
case 3: //修改学生信息
Amend(head);
baocun(head);
break;
case 4: //删除学生信息
delet(head);
baocun(head);
break;
case 5: //查看学生信息
view(head);
break;
case 0: // 退出程序
break;
default :
printf("\t无此选项,请重新输入\n");
}
} while (n);
printf("\t结束程序");
return 0;
}
该部分是为了防止用户输入字符串;
以及其实际作用;
while(n!=1){
while(getchar()!='\n' );
printf("\t警告只能输入数字!选择功能:");
n=scanf("%d", &v);
}
n=v;
用链表添加学生信息:
typedef struct student {
char name[20];//姓名
int id;//学号
int class_num;//班级
int chinese;//分数
int math;//分数
int english;//分数
int all;//总分
struct student *next;
}student;
void Add(student *head) {
//程序1.添加学生信息
int i;
do {
student *o=head->next;
student *p;
p = (student *)malloc(sizeof(student));
int j,b,k,l,v,e;
int id;//学号
char name[20];//姓名
int class_num;//班级
int chinese;//分数
int math;//分数
int english;//分数
int all;//总分
printf("\t输入学生学号:");
id=scanf("%d", &v);
while(id!=1){
while((getchar())!='\n' );
printf("\t警告只能输入数字!学号:");
id=scanf("%d", &v);
}
id=v;
while (o) {
if (o == NULL) {
break;
}
if (o->id == id) {
printf("\t学号重复请重新输入学号:");
scanf("%d", &id);
o = head->next;
} else {
o = o->next;
}
}
printf("\t姓名:");
scanf("%s",name);
printf("\t班级:");
class_num=scanf("%d", &j);
while(class_num!=1){
while(getchar()!='\n' );
printf("\t警告只能输入数字!班级:");
class_num=scanf("%d", &j);
}
class_num=j;
printf("\t语文:");
chinese=scanf("%d", &b);
while(chinese!=1){
while((getchar())!='\n' );
printf("\t警告只能输入数字!语文:");
chinese=scanf("%d", &b);
}
chinese=b;
printf("\t数学:");
math=scanf("%d", &k);
while(math!=1){
while((getchar())!='\n' );
printf("\t警告只能输入数字!数学:");
math=scanf("%d", &k);
}
math=k;
printf("\t英语:");
english=scanf("%d", &l);
while(english!=1){
while((getchar())!='\n' );
printf("\t警告只能输入数字!英语:");
english=scanf("%d", &l);
}
english=l;
all=chinese+english+math;
p->all=all;
p->id = id;
strcpy(p->name, name);
p->class_num = class_num;
p->chinese = chinese;
p->math = math;
p->english = english;
p->next = head->next;
head->next = p;
printf("\t添加成功\n");
printf("\t是否继续添加\n");
printf("\t是请输入'1',否请输入'0'\n");
printf("\t请输入数字:");
i=scanf("%d", &e);
while(i!=1){
while(getchar()!='\n' );
printf("\t警告只能输入数字!1或0:");
i=scanf("%d", &e);
}
i=e;
while (i > 1 || i < 0) {
printf("\t无效数字,请重新输入:");
scanf("%d", &i);
}
if (i == 0) {
printf("\t正在退出添加程序\n");
printf("\t退出成功\n");
}
} while (i);
}
修改功能以及其功能展示:
void Amend(student *head) {
//修改学生信息
student *x = head->next;
printf("\t输入修改学生的学号:");
int s,b;
s=scanf("%d", &b);
while(s!=1){
while((getchar())!='\n' );
printf("\t警告只能输入数字!学号:");
s=scanf("%d", &b);
}
s=b;
while (x) {
if (x->id == s) {
int i,j;
do {
printf("\t\t\t 选择修改项目:\n");
printf("\t\t--------------------------------\n");
printf("\t\t- 1. 学生班级 -\n");
printf("\t\t- 3. 语文成绩 -\n");
printf("\t\t- 4. 数学成绩 -\n");
printf("\t\t- 5. 英语成绩 -\n");
printf("\t\t- 0. 退出 -\n");
printf("\t\t--------------------------------\n");
printf("\t选择功能:");
i=scanf("%d", &j);
while(i!=1){
while((getchar())!='\n' );
printf("\t警告只能输入数字!学号:");
i=scanf("%d", &j);
};
i=j;
switch (i) {
case 1:
printf("\t输入修改后的班级:");
scanf("%d", &x->class_num);
break;
case 2:
printf("\t输入修改后的语文成绩:");
scanf("%d", &x->chinese);
break;
case 3:
printf("\t输入修改后的数学成绩:");
scanf("%d", &x->math);
break;
case 4:
printf("\t输入修改后的英语成绩:");
scanf("%d", &x->english);
break;
case 0:
printf("\t退出成功\n");
break;
default:
printf("\t无效数字,请重新输入\n");
break;
}
} while (i);
x->all=x->chinese+x->math+x->english;
break;
} else {
x = x->next;
if (x == NULL) {
printf("\t无相关学生\n");
break;
}
}
}
}
删除学生信息:
void delet( student *head) { //5.删除学生信息
student *a = head;
student *b = head->next;
int i,j;
printf("\t请输入学生学号:");
i=scanf("%d", &j);
while(i!=1){
while((getchar())!='\n' );
printf("\t警告只能输入数字!学号:");
i=scanf("%d", &j);
}
i=j;
while (b) {
if (b->id == i) {
a->next = b->next;
free(b);
printf("\t删除完成\n");
break;
} else {
a = a->next;
b = b->next;
if (b == NULL) {
printf("\t无该学生\n");
}
}
}
}
void baocun(student *head)//学生信息保存
{
FILE*fp=fopen("D:\\学生信息.txt","w+");
student *p;
p=head->next;
if(fp==NULL)
{
printf("打开失败");
exit(1);//异常退出
}
while(p!=NULL)
{
fprintf(fp,"%s\n",p->name);
fprintf(fp,"%d\n",p->chinese);
fprintf(fp,"%d\n",p->math);
fprintf(fp,"%d\n",p->english);
fprintf(fp,"%d\n",p->all);
p=p->next;
}
printf("\t保存成功!\n");
fclose(fp);//关闭文件
}
查找学生信息:
void seek()
{
char a[20];
char b[20];
char c[20];
char d[20];
char e[20];
FILE *fp=fopen("D:\\学生信息.txt","r");
if(fp==NULL)
{
printf("打开失败");
exit(1);//异常退出
}
while(fscanf(fp,"%s",a)!=EOF)
{
fscanf(fp,"%s",b);
fscanf(fp,"%s",c);
fscanf(fp,"%s",d);
fscanf(fp,"%s",e);
printf("学生姓名:%s\n",a);
printf("语文成绩:%s\n",b);
printf("数学成绩:%s\n",c);
printf("英语成绩:%s\n",d);
printf("总分成绩:%s\n",e);
printf("\n");
}
fclose(fp);
printf("\t查看完毕\n");
}
将操作后的信息保存进入文件:
void baocun(student *head)//学生信息保存
{
FILE*fp=fopen("D:\\学生信息.txt","w+");
student *p;
p=head->next;
if(fp==NULL)
{
printf("打开失败");
exit(1);//异常退出
}
while(p!=NULL)
{
fprintf(fp,"%s\n",p->name);
fprintf(fp,"%d\n",p->chinese);
fprintf(fp,"%d\n",p->math);
fprintf(fp,"%d\n",p->english);
fprintf(fp,"%d\n",p->all);
p=p->next;
}
printf("\t保存成功!\n");
fclose(fp);//关闭文件
}
文件的小知识:
r | 打开一个已有的文本文件,允许读取文件。 |
w | 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。 |
a | 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。 |
r+ | 打开一个文本文件,允许读写文件。 |
w+ | 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。 |
a+ | 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。 |
到了这里,我们的学生大作业,学生管理系统已经完结了。