1、 X X 师 范 大 学 实 验 报 告 课 程 C语言课程设计 任课老师 学 号 姓 名 院 系 _______年______月至_______年_______月
2、 注意事项 1. 使用C语言,代码已在vs中运行过,能够运行(关键功效全部能实现) 2. 需求分析,前期设计全部没写,请同学们自己完成 3. 附带有 student.txt 文件,将其移动至 F:\stu 文件夹中,运行程序时可直接选 6号指令,从中读取学生信息。假如没有该txt文件(可能会在上传过程中丢失),仍需在F盘下新建stu文件夹,各文件将保留于该文件夹中 4. 按word格式输出还未设计好,有爱好可自己完成 5. 按excel格式输出,完成后需自行调整对应列宽(拉宽),使内容美观 6. 从下一页开始,复制余下全文
3、粘贴即可运行
#include
4、 int sortage(struct student stu[], int m); int sortmark(struct student stu[],int sm[], int m, int n); void prinsort(struct student stu[], int m, int n); int writefile(struct student stu[], FILE *fp, int m, int n); int readfile(struct student stu[], FILE *fp, int m, int n); int fprinword(struct
5、 student stu[], FILE *fp, int m, int n); int fprinexcel(struct student stu[], FILE *fp, int m, int n); int seachsno(struct student stu[],long sno, int m,int n); int seachsname(struct student stu[],char sname[], int m, int n); int desno(struct student stu[], long sno, int m); int desname(struct
6、student stu[], char sname[], int m); int cutin(struct student stu[], int m, int n); struct student { int turn; long sno; char sname[20]; char sgrade[10]; char sbirth[10]; int smark[N]; }; void main() { int i = 0; int con1 = 0; int con2 = 0; long sno; char s
7、name[20]; FILE *fp = NULL; struct student stu[M]; for (i = 0; i < M; i++) { stu[i].turn = -1; } do { printf("\n\n********************************************\n"); printf(" \n *** 学生信息管理系统 ***\n\n"); printf(" *** 请按提醒输入对应命令: ***\n\n"); printf(" 1 键
8、盘输入全部学生基础信息\n"); printf(" 2 屏幕输出全部学生基础信息\n"); printf(" 3 子菜单:按一定次序对学生进行排序\n"); printf(" 4 按次序屏幕输出学生信息\n"); printf(" 5 保留学生信息(二进制文件)\n"); printf(" 6 从上次保留二进制文件中读取学生信息\n"); printf(" 7 子菜单:将学生信息保留为文本文档(人工阅读)\n"); printf(" 8 子菜单:对单个学生插入删除查询修改\n"); printf(" -1 退出系统\
9、n"); scanf("%d", &con1); switch (con1) { case 1: { printf("\n*** 注意! ***\n"); printf(" 继续进行输入会覆盖原数据!!!\n"); printf(" 第一次使用本软件或需重新写信息请继续:\n "); printf(" 1 继续\n"); printf(" -1 返回\n"); scanf("%d", &con2); if (con2 == 1) { inputs
10、tu(stu, M, N); } break; } case 2:prinstu(stu, M, N); break; case 3: { do { printf("\n****************************************\n"); printf(" 1 按学号次序进行排序\n"); printf(" 2 按年纪从小到大排序\n"); printf(" 3 按总成绩由高到低排序\n"); printf(" -1 返回上一级菜单\n");
11、 scanf("%d", &con2); switch (con2) { case 1: { sortsno(stu, M); con2 = 0; break; } case 2: { //sortage(stu, M); break; } case 3: { int sm[M]; sortmark(stu, sm, M, N); break;
12、 } case -1:break; default: printf("二级命令输入错误,请重试!\n"); fflush(stdin); } } while (con2 != -1); break; } case 4:prinsort(stu, M, N); break; case 5:writefile(stu, fp, M, N); break; case 6:readfile(stu, fp, M, N); break; case 7: { pr
13、intf("\n************************************************\n"); printf(" 1 将学生信息输出为txt文档,路径:F:\stu\student.txt\n"); printf(" 2 将学生信息输出为word文档, 路径:F:\stu\student.doc \n"); printf(" 3 将学生信息输出为excel文档, 路径:F:\stu\student.xls \n"); printf(" -1 返回上一级菜单\n"); scanf("%d", &con2)
14、 switch (con2) { case 1: { break; } case 2: { fprinword(stu, fp, M, N); break; } case 3: { fprinexcel(stu, fp, M, N); break; } } } break; case 8: { do { printf("\n************
15、\n\n"); printf(" 1 按学号查询单个学生\n"); printf(" 2 按姓名查询单个学生\n"); printf(" 3 按学号删除单个学生\n"); printf(" 4 按姓名删除单个学生\n"); printf(" 5 插入单个学生信息\n"); printf("-1 返回主菜单\n"); scanf("%d", &con2); switch (con2) { case 1:
16、{ printf("请输入单个学号:\n"); scanf("%10ld", &sno); seachsno(stu, sno, M, N); break; } case 2: { printf("请输入单个学生姓名:\n"); scanf("%20s",sname); seachsname(stu, sname, M, N); break; } case 3: { printf("请输
17、入单个学号:\n"); scanf("%10ld",&sno); desno(stu, sno, M); break; } case 4: { printf("请输入单个学生姓名:\n"); scanf("%s", sname); desname(stu, sname, M); break; } case 5: { cutin(stu, M, N); break; } def
18、ault: { printf("二级指令错误,请重新输入!\n"); break; } } } while (con2 != -1); } case -1:printf("感谢使用本系统!\n"); break; default: printf("一级命令输入错误,请重试"); fflush(stdin); break; } } while (con1 != -1); } //输入学生基础信息 int inputstu(stru
19、ct student stu[],int m,int n) { int i = 0; int j = 0; printf("请按说明输入学生信息:\n"); while (i < m) { printf("请输入第%d个学生学号,姓名,班级,出生日期:\n", i + 1); scanf("%10ld%20s%10s%10s", &stu[i].sno, &stu[i].sname, &stu[i].sgrade, &stu[i].sbirth); for (j = 0; j < n; j++) { printf("请输入第%d个学生第%d
20、门成绩\n",i+1,j+1); scanf("%d", &stu[i].smark[j]); } i++; } return i; } //屏幕输出学生信息 void prinstu(struct student stu[], int m, int n) { int i = 0; int j = 0; printf("**********************************************************\n"); printf("学生基础信息以下:\n"); printf(" 学号
21、 姓名 班级 出生年月 成绩1 成绩2 成绩3\n"); while (i < m) { if (stu[i].sno == 0) { i++; continue; } printf("%10ld %20s%10s %10s ", stu[i].sno, stu[i].sname, stu[i].sgrade, stu[i].sbirth); for (j = 0; j < n; j++) { printf(" %d ", stu[i].smark[j]);
22、 } printf("\n"); i++; } } //按学号次序进行排序 int sortsno(struct student stu[],int m) { int i = 0; int j = 0; int s; long sno[M]; for (i = 0; i < M; i++) { sno[i] = stu[i].sno; } for (i = 0; i < m; i++) { for (j = i+1; j < m; j++) { s = sno[i]; if (s >sno[
23、j]) { s = sno[j]; sno[j] = sno[i]; sno[i] = s; } } } for (i = 0; i < m; i++) { for (j = 0; j < m; j++) { if (stu[j].sno == sno[i]) { stu[j].turn = i; } } } return i; } //按年纪对学生进行排序; int sortage(struct student stu[], int m) { }
24、 //按总成绩由高到低排序 int sortmark(struct student stu[],int sm[], int m,int n) { int i = 0; int j = 0; int s = 0; for (i = 0; i < m; i++) { sm[i] = 0; } for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { sm[i] = sm[i] + stu[i].smark[j]; } } for (i = 0; i < m; i++) {
25、
for (j = i + 1; j < m; j++)
{
s = sm[i];
if (s 26、\n");
printf("按排序,学生基础信息以下:\n");
printf(" 学号 姓名 班级 出生年月 成绩1 成绩2 成绩3\n");
while (k < m)
{
if (stu[i].sno == 0)
{
continue;
}
for (i = 0; i < m; i++)
{
if (stu[i].turn == k)
{
printf("%10ld %20s%10s 27、 %10s ", stu[i].sno, stu[i].sname, stu[i].sgrade, stu[i].sbirth);
for (j = 0; j < n; j++)
{
printf(" %d ", stu[i].smark[j]);
}
printf("\n");
}
}
k++;
}
}
//写数据进二进制文件
int writefile(struct student stu[],FILE *fp,int m,int n)
{
int i = 1;
fp = fo 28、pen("f:\\stu\\student.txt", "wb");
if (fp == NULL)
{
printf("打开文件失败!\n");
exit(0);
}
fwrite(&stu[0],sizeof(struct student),m,fp);
i = fclose(fp);
return i;
}
//从二进制中读取学生信息
int readfile(struct student stu[], FILE *fp, int m, int n)
{
int i = 1;
fp = fopen("f:\\stu\\student 29、txt", "rb");
if (fp == NULL)
{
printf("打开文件失败!\n");
exit(0);
}
fread(&stu[0], sizeof(struct student), m, fp);
i = fclose(fp);
return i;
}
//将学生信息写入word文档,保留于 F:\stu\student.doc
int fprinword(struct student stu[], FILE *fp, int m, int n)
{
int i = 0;
int j = 0;
fp = fo 30、pen("F:\\stu\\student.doc","w");
if (fp == NULL)
{
printf("文件打开失败!");
exit(0);
}
while (i < m)
{
if (stu[i].sno == 0);
{
continue;
}
fprintf(fp,"%10ld %20s%10s%10s", stu[i].sno, stu[i].sname, stu[i].sgrade, stu[i].sbirth);
for (j = 0; j < n; j++)
{
fprintf(f 31、p," %d ", stu[i].smark[j]);
}
printf("\n");
i++;
}
fclose(fp);
return i;
}
//将学生信息写入excel文档,保留于 F:\stu\student.xls
int fprinexcel(struct student stu[], FILE *fp, int m, int n)
{
int i = 0;
int j = 0;
char t = '\t';
char lin[20]="成绩";
char str[4][20];
strcpy(str[0] 32、 " 学号");
strcpy(str[1], " 姓名");
strcpy(str[2], " 班级");
strcpy(str[3], " 生日");
fp = fopen("F:\\stu\\student.xls", "w");
if (fp == NULL)
{
printf("文件打开失败!");
exit(0);
}
fprintf(fp, "%s%c%s%c%s%c%s", str[0], t, str[1], t, str[2], t, str[3]);
for (i = 0; i < n; i++)
{
f 33、printf(fp, "%c %s%d", t, lin, i+1);
}
fprintf(fp, "\n");
i = 0;
while (i < m)
{
if (stu[i].sno == -1)
{
continue;
}
fprintf(fp, "%10ld%c%20s%c%10s%c%10s", stu[i].sno,t, stu[i].sname,t, stu[i].sgrade,t, stu[i].sbirth);
for (j = 0; j < n; j++)
{
fprintf(fp, "%c%d", 34、 t,stu[i].smark[j]);
}
fprintf(fp,"\n");
i++;
}
fclose(fp);
return i;
}
//按学号查询单个学生
int seachsno(struct student stu[],long sno,int m,int n)
{
int i = 0;
int j = 0;
for (i = 0; i < m; i++)
{
if (stu[i].sno == sno)
{
printf("按学号查询到学生基础信息以下:\n");
printf(" 35、学号 姓名 班级 出生年月 成绩1 成绩2 成绩3\n");
printf("%10ld %20s%10s %10s ", stu[i].sno, stu[i].sname, stu[i].sgrade, stu[i].sbirth);
for (j = 0; j < n; j++)
{
printf(" %d ", stu[i].smark[j]);
}
printf("\n");
break;
}
}
return i;
}
//按姓名查询单 36、个学生
int seachsname(struct student stu[],char sname[], int m, int n)
{
int i = 0;
int j = 0;
int s = -1;
for (i = 0; i < m; i++)
{
s = strcmp(stu[i].sname, sname);
if (s == 0)
{
printf("按姓名查询到学生基础信息以下:\n");
printf(" 学号 姓名 班级 出生年月 成绩1 成绩2 成 37、绩3\n");
printf("%10ld %20s%10s %10s ", stu[i].sno, stu[i].sname, stu[i].sgrade, stu[i].sbirth);
for (j = 0; j < n; j++)
{
printf(" %d ", stu[i].smark[j]);
}
printf("\n");
break;
}
}
return i;
}
//按学号删除单个学生信息
desno(struct student stu[], long sno,int 38、 m)
{
int i = 0;
for (i = 0; i < m; i++)
{
if (stu[i].sno == sno)
{
stu[i].sno = 0;
break;
}
}
return i;
}
//按姓名删除单个学生
int desname(struct student stu[], char sname[], int m)
{
int i = 0;
int j = 0;
int s = -1;
for (i = 0; i < m; i++)
{
s = strcmp(stu[i] 39、sname, sname);
if (s == 0)
{
stu[i].sno = 0;
break;
}
}
return i;
}
//插入单个学生
int cutin(struct student stu[],int m,int n)
{
int i = 0;
int j = 0;
for (i=0;i






