c语言课程设计 之 成绩管理系统
一:
第一次发博客,请支持!
这个是自己弄的 c语言课程设计,用的链表,因为刚学用了一个月,错误在所难免,请多多指教。
所用为高考成绩的数据。
有以下功能:
1、 录入学生的成绩信息:学号、班级、姓名、性别、各科成绩。
2、 输入信息,支持学号的容错性。
3、 显示所有学生成绩的基本信息。
4、 导入数据文件,文本文件。
5、 导出数据文件,文本文件。
6、 按学号、班级、姓名、性别、各科成绩 进行筛选,对筛选数据进行删除和另存。
7、 按学号和姓名进行查询学生信息。
8、 对学生成绩信息进行可选性修改。
9、 按学号删除学生信息,按随机编号多个删除。
10、按班级、学号、性别、各科成绩、总分等对学生进行排序。
11、系统操作帮助功能。
12、系统信息显示。
13、密码修改,启用或关闭密码功能。
14、退出系统。
二:
答辩结束之后,又想到了密码可以完全放在链表数据中,这样也可以增加管理员账户和普通账户的密码功 能。时间能力问题,也只能这样吧。学完的C语言同学有兴趣 可以实现更强大的功能。另此处代码仅做讨论 使用。
三:
另 可在网盘下载相关的运行数据附件 http://pan.baidu.com/s/1sjDJVC5
由 南阳理工学院,计算机科学与技术专业 学生制作。
四:
代码如下:
<span style="color:#6600cc;">#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <windows.h> //Sleep()
#include <time.h> //time
struct stu
{
char b[3]; //班级
char num[15]; //姓名
char nam[8]; //学号
char sex[6]; //性别
char sx[4]; //数学
char yw[4]; //语文
char en[4]; //英语
char zh[4]; //综合
struct stu *ps;
};
//**********************
//主菜单 *********** 22
char emue(int sec,int x,int y)
{
system("cls");
char ch[20],t='m';
printf("\n\n\n\n");
printf("\t*******************成绩管理系统*********************\n"),Sleep(30);
printf("\t*||==============================================||*\n"),Sleep(30);
printf("\t*||----------------------------------------------||*\n"),Sleep(30);
printf("\t*|| 文件 | 编辑 | 系统 ||*\n"),Sleep(30);
printf("\t*||------------|--------------------|------------||*\n"),Sleep(30);
printf("\t*|| 查看(c) | 新增(n) 删除(d) | 帮助(h) ||*\n"),Sleep(30);
printf("\t*|| 打开(o) | 查找(f) 筛选(x) | 系统(t) ||*\n"),Sleep(30);
printf("\t*|| 保存(s) | 修改(r) 排序(p) | 退出(q) ||*\n"),Sleep(30);
printf("\t*||----------------------------------------------||*\n"),Sleep(30);
printf("\t*==================================================*\n"),Sleep(30);
int hour,min;
hour=sec/3600;
min=(sec%3600)/60;
sec=(sec%3600)%60;
if(hour>0)
printf("\t 已登陆%3d 时%3d 分%3d 秒,",hour,min,sec);
else if(min>0)
printf("\t 已登陆:%3d 分:%3d 秒,",min,sec);
else if(sec>=0)
printf("\t 已登陆:%3d 秒,",sec);
printf("已操作%3d 次,距上次保存%3d 次。\n",x-1,y-1),Sleep(30);
printf("\t 请输入命令:_____\b\b\b\b\b");
gets(ch);
if(strlen(ch)>1)
return t;
else return t=ch[0];
return t=ch[0];
}
//**********************
//输出显示数据 ***** 58
void pri(struct stu *ph)
{
struct stu *pt;
pt=ph;
int k=1;
double sum;
printf("\n 编号: 班级: 学号: 姓名: 性别: 数学: 语文: 英语: 综合: 总分:\n");
if(pt==NULL)
{
printf("\n\t无数据显示!\n\t请按 enter 键继续:___\b\b\b");
getchar();
}
else
{
while(pt!=NULL)
{
sum=atof(pt->sx)+atof(pt->yw)+atof(pt->en)+atof(pt->zh);
printf("%4d: %3s%15s%8s %4s %4s %4s %4s %4s %4.2f\n",k++,pt->b,pt->num,pt->nam,pt->sex,pt->sx,pt->yw,pt->en,pt->zh,sum);
if(k%200==0)
{
char ch;
printf("\t按Q/q 退回主菜单:\n\t按enter键显示下一页;\n\t_____\b\b\b\b\b");
ch=getchar();
if(ch=='q'||ch=='Q')
break;
system("cls");
}
pt=pt->ps;
}
if(pt==NULL)
printf("\n\t数据显示完毕!\n");
}
}
//**********************
//打开 text.dat **** 94
struct stu *ope()
{
FILE *fp;
long long a;
struct stu *pn,*pb,*ph;
if((fp=fopen("text.dat","rb"))==NULL)
{
printf("\t打开文件失败!");
ph=NULL;
return(ph);
}
else
printf("\n\n\t\t文件成功打开!\n");
int k=0;
pn=(struct stu *)malloc(sizeof(struct stu));
fread(&a,sizeof(long long int),1,fp);
while(1)
{
k++;
if((fread(pn,sizeof(struct stu),1,fp))!=1)
{
if(k==1)
ph=NULL;
break;
}
if(k==1)
ph=pn;
else
pb->ps=pn;
pb=pn;
pb->ps=NULL;
pn=(struct stu *)malloc(sizeof(struct stu));
}
fclose(fp);
printf("\t\t数据成功读入!\n");
return(ph);
};
//**********************
//读入text x.txt *** 135
struct stu *rea(char s[])
{
system("cls"); // 清屏;
FILE *fp;
struct stu *pn,*pb,*ph;
ph=NULL;
if((fp=fopen(s,"r"))==NULL)
{
fclose(fp);
printf("\n\t打开文件失败!");
return(ph);
}
else
printf("\n\n\t\t文件成功打开!\n");
int k=0;
pn=(struct stu *)malloc(sizeof(struct stu));
while(1)
{
k++;
//判断文件是否有数据
if(fscanf(fp,"%s",pn->b