聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 学生成绩管理系统实验报告

学生成绩管理系统实验报告

时间:2017-06-19 15:35:49    下载该word文档

桂林航天工业学院

课程设计总结报告

报告题目

学生管理系统

开课学期

2016-2017学年第2学期

班 级

软件工程4

姓 名

有什么不懂的可以加我

学 号

QQ:1416978277

地 点

巡天楼314机房

报告日期

2017年6月17

成绩(五级记分制):         

指导教师(签字):_____________________



1.课程设计目的和要求

本课程设计是针对刚学完C语言的计算机类专业学生的课程设计教学。C语言是学生的第一门计算机高级语言课程,课程结束后,学生已经对C语言程序设计有了较全面的了解,但接触的基本上是为了阐述相关概念或知识点而列举的示例,都是较小的程序,程序功能单一,因此缺乏整体观点和编写一个具体实用的综合程序的思想。

本课程设计的目的是要培养学生初步具有系统分析思想,并能利用开发工具开发一个简单实用的综合程序。为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力,提高学生适应实际,实践编程的能力。

要求学生以VC++6.0为开发工具,完成一个小型应用软件的设计和开发。进一步提高学生进行程序设计的能力。

2.课程设计的主要内容

(1)选题

(2)进行系统分析

(3)程序设计实现

(4)系统测试

(5)编写、上交课程设计报告

3.实践要求

(1)系统设计要实用。

(2)对系统进行功能模块分析,主要功能模块正确实现

(3)编程简练,可读性好,界面友好,功能全面。

(4)课程设计报告格式要规范

4.课程设计题目描述和要求

本课程设计选题为“学生成绩管理系统”。系统主要功能是管理学生成绩信息,要求能实现学生成绩添加、删除、修改、查找、平均分排序等功能。经过分析,确定本系统结构图如下图所示:

5.系统实现

5.1头文件

以下各个函数所需的头文件以及预定义

#include

#include

#include

#include

#include

#define N 128

#define stlensizeof(structst)//结构体长度

5.2结构体

根据系统所管理数据信息的要求和特点,将学生成绩信息定义成以下结构体类型

structst

{

int no; //序号

int flag; //标记

char num[8]; //学号

char name[8]; //姓名

float cpp; //C语言成绩

float eng; //英语成绩

float math; //数学成绩

float ave; //平均分

};

5.3全局变量

为了简化函数的参数传递

structst s[N];

int tot=0;//结构体个数

int flag0=0;//标记为0的个数

5.4函数声明

方便各个函数相互调用

void head();

int all(int t);

int change();

intdelall();

intdelpart();

int display(int t);

int find();

intfindswitch(int t);

int input();

int insert();

int part(int t);

int recycle();

int reset();

int save();

int sort();

intsortswitch(int x);

int view();

intviewplus();

6.源码

6.1口令函数

为了验证是否为主人操作,正确后才可以进入系统,否则3次错误退出系统

void main()

{

system("mode con cols=94 lines=30");//9430列(居中)

SetConsoleTitle("学生管理系统"); //标题

system("color F0");//白底黑字

printf("欢迎使用学生管理系统\n");

printf("请输入口令!\n");

char get[10],pw[]="123";//密码

int count=3;

while(count)

{

gets(get);

if(strcmp(get,pw)==0)

{

printf("口令正确!正在进入系统...\n");

Sleep(500);head();

}

else

{

if(count!=1)

{

printf("口令错误!请重新输入!\n");

printf("您还有%d次机会!\n",--count);

}

else

{

printf("口令错误!按任意键退出系统!\n");

getch();exit(1);

}

}

}

}

6.2主函数

进入主界面

void head()

{

FILE *fp;

if((fp=fopen("data.dat","r"))==NULL)//如果没有文件

fp=fopen("data.dat","wb+"); //创建一个文件

fp=fopen("data.dat","rb");

fseek(fp,0L,SEEK_END);//指向文件尾

tot=ftell(fp)/stlen; //结构体个数

fseek(fp,0L,SEEK_SET);//指向文件头

fread(s,stlen,tot,fp);

for(inti=0;i

{

if(s[i].flag==0)

flag0++;//查找标记为0的个数

}

fclose(fp);

while(1)

{

system("cls");

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* 欢迎使用学生管理系统 *\n");

printf("\t\t\t\t* 按键进入相应功能 *\n");

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* 1.输入学生数据 *\n");

printf("\t\t\t\t* 2.显示 *\n");

printf("\t\t\t\t* 3.回收站 *\n");

printf("\t\t\t\t* 4.重置系统 *\n");

printf("\t\t\t\t* 0.退出 *\n");

printf("\t\t\t\t******************************\n\n");

switch(getch())

{

case '1':input();break;

case '2':view();break;

case '3':recycle();break;

case '4':reset();break;

case '0':exit(1);

default :printf("输入有误!请重新输入。\n");Sleep(500);

}

}

}

6.3输入函数

输入数据

int input()//输入

{

FILE *fp;

fp=fopen("data.dat","ab+");

//system("cls");

printf("请输入【学号】【姓名】【C语言成绩】【英语成绩】【高数成绩】\n");

printf("(【学号】输入【0】保存并返回主菜单)\n");

for(inti=0;i

{

scanf("%s",s[i].num);

if(strlen(s[i].num)==1&&s[i].num[0]=='0') //如果输入的长度为1并且是0,退出

{

fclose(fp); return 0;//非正常退出关闭文件

}

scanf("%s%f%f%f",&s[i].name,&s[i].cpp,&s[i].eng,&s[i].math);

s[i].ave=(s[i].cpp+s[i].eng+s[i].math)/3;

s[i].no=++tot;

s[i].flag=0;//新增结构体自增,标记为0

flag0++;//标记0个数自增

fwrite(&s[i],stlen,1,fp);

}

fclose(fp);//正常退出关闭文件

printf("数据已超出,请删除后再添加。\n");

printf("正在返回主菜单...\n");Sleep(500);

}

6.4显示函数

显示数据以及下一步操作

int view()

{

if(flag0==0)

printf("无数据!\n");

else

{

display(0);

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆以上为学生数据: *\n");

printf("\t\t\t\t* ◆请选择操作: *\n");

printf("\t\t\t\t* 1.多项删除 *\n");

printf("\t\t\t\t* 2.全部删除 *\n");

printf("\t\t\t\t* 3.修改 *\n");

printf("\t\t\t\t* 4.插入 *\n");

printf("\t\t\t\t* 5.查找 *\n");

printf("\t\t\t\t* 6.排序 *\n");

printf("\t\t\t\t* 7.另存为... *\n");

printf("\t\t\t\t* ▲【其他键】返回主菜单 *\n");

printf("\t\t\t\t******************************\n");

switch(getch())

{

case '1'://多项删除

{

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆正在进行多项删除操作 *\n");

printf("\t\t\t\t* ◆输入【序号】删除 *\n");

printf("\t\t\t\t* ◆多项之间加【空格】 *\n");

printf("\t\t\t\t* ▲结束加【0 *\n");

printf("\t\t\t\t******************************\n");

part(1);

}break;

case '2'://全部删除

{

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆确定【全部删除】吗? *\n");

printf("\t\t\t\t* ■【回车键】确认 *\n");

printf("\t\t\t\t* ▲【其他键】取消 *\n");

printf("\t\t\t\t******************************\n");

if(getch()==13)

{

all(1);

printf("全部删除成功!正在返回上一级。\n");

}

else

printf("您已取消全部删除,正在返回上一级。\n");

}break;

case '3'://数据修改

{

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆正在进行数据修改操作 *\n");

printf("\t\t\t\t* ■请输入要修改的【序号】*\n");

printf("\t\t\t\t* ▲【0】取消 *\n");

printf("\t\t\t\t******************************\n");

change();

}

case '4':

{

insert();

}break;

case '5':

{

find();

}break;

case '6':

{

sort();

}break;

case '7':

{

save();

}break;

}

}

Sleep(500);

return 0;

}

6.4.1多项删除

删除部分数据到回收站

int part(int t)//部分

{

int x[N],i=0,co=0;

while(1)

{

scanf("%d",&x[i]);co++;

if(x[0]==0)return 0;

if(x[i++]==0)break;

}

printf("操作的学生序号为:");

for(i=0;i

printf("%d ",x[i]);

printf("\n确认操作请按【回车键】,否则按【其他键】\n");

if(getch()==13)

{

if(t==1)flag0-=(co-1);

if(t==0)flag0+=(co-1);

FILE *fp;

fp=fopen("data.dat","wb+");

for(inti=0;i

s[x[i]-1].flag=t;//替换的值

fwrite(s,stlen,tot,fp);

fclose(fp);

}

else

return 0;

}

6.4.2全部删除

数据全部删除到回收站

int all(int t)//全部

{

if(getch()==13)

{

if(t==1)flag0=0;

if(t==0)flag0=tot;

FILE *fp;

fp=fopen("data.dat","wb+");

for(int j=0;j

s[j].flag=t;//替换的值

fwrite(s,stlen,tot,fp);

fclose(fp);

}

else

return 0;

}

6.4.3修改

修改某个数据

int change()

{

int no;

scanf("%d",&no);

if(no==0)return 0;

if(no>tot)

{

printf("未找到!\n");return 0;

}

if(no>0&&no<=tot)

{

inti=no-1;

printf("◆原数据为:\n");

printf("序号\t学号\t姓名\tC语言\t英语\t高数\t平均分\n");

printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",

s[i].no,s[i].num,s[i].name,s[i].cpp,s[i].eng,s[i].math,s[i].ave);

printf("◆请输入修改后的数据:\n");

printf("请输入【学号】【姓名】【C语言成绩】【英语成绩】【高数成绩】\n");

printf("(输入【0】取消并返回主菜单)\n");

scanf("%s",s[i].num);

if(strlen(s[i].num)==1&&s[i].num[0]=='0') return 0;

scanf("%s%f%f%f",&s[i].name,&s[i].cpp,&s[i].eng,&s[i].math);

s[i].ave=(s[i].cpp+s[i].eng+s[i].math)/3;

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆确定【修改数据】吗? *\n");

printf("\t\t\t\t* ◆修改后数据不可恢复 *\n");

printf("\t\t\t\t* ■【回车键】确认 *\n");

printf("\t\t\t\t* ▲【其他键】取消 *\n");

printf("\t\t\t\t******************************\n");

if(getch()==13)

{

FILE *fp;

fp=fopen("data.dat","wb+");

fwrite(s,stlen,tot,fp);

fclose(fp);

printf("修改成功!\n");

}

else

printf("您已取消修改,正在返回上一级。\n");

Sleep(500);

}

return 0;

}

6.4.4插入

从某个位置插入数据

int insert()

{

printf("请输入要插入的【序号】\n");

int no;

scanf("%d",&no);

if(no==0)return 0;

if(no>tot)

{

printf("输入有误!\n");return 0;

}

if(no>0&&no<=tot)

{

for(inti=tot+1;i>no-1;i--)

{

s[i]=s[i-1];

s[i].no++;

}

printf("请输入【学号】【姓名】【C语言成绩】【英语成绩】【高数成绩】\n");

printf("(输入【0】取消并返回主菜单)\n");

i=no-1;

scanf("%s",s[i].num);

if(strlen(s[i].num)==1&&s[i].num[0]=='0') return 0;

scanf("%s%f%f%f",&s[i].name,&s[i].cpp,&s[i].eng,&s[i].math);

s[i].ave=(s[i].cpp+s[i].eng+s[i].math)/3;

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆确定【修改数据】吗? *\n");

printf("\t\t\t\t* ◆修改后数据不可恢复 *\n");

printf("\t\t\t\t* ■【回车键】确认 *\n");

printf("\t\t\t\t* ▲【其他键】取消 *\n");

printf("\t\t\t\t******************************\n");

if(getch()==13)

{

FILE *fp;

fp=fopen("data.dat","wb+");

fwrite(s,stlen,tot+1,fp);

fclose(fp);

tot++;

flag0++;

printf("修改成功!\n");

}

else

printf("您已取消修改,正在返回上一级。\n");

}

return 0;

}

6.4.5查找

查找某个数据

int find()

{

while(1)

{

system("cls");

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆请选择查找方式 *\n");

printf("\t\t\t\t* 1.学号 *\n");

printf("\t\t\t\t* 2.姓名 *\n");

printf("\t\t\t\t* 0.返回主菜单 *\n");

printf("\t\t\t\t******************************\n\n");

switch(getch())

{

case '1':printf("请输入要查找的【学号】\n");findswitch(1);break;

case '2':printf("请输入要查找的【姓名】\n");findswitch(2);break;

case '0':return 0;break;

default :printf("输入有误!请重新输入。\n");Sleep(500);

}

}

}

6.4.5.1学号

按照学号查找

intfindswitch(int t)

{

inti;

charch[8];

gets(ch);

for(i=0;i

{

if(t==1&&strcmp(ch,s[i].num)==0)break;

if(t==2&&strcmp(ch,s[i].name)==0)break;

}

if(s[i].flag==0&&i

{

printf("已找到!\n");

printf("序号\t学号\t姓名\tC语言\t英语\t高数\t平均分\n");

printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",

s[i].no,s[i].num,s[i].name,s[i].cpp,s[i].eng,s[i].math,s[i].ave);

}

else

printf("未找到!\n");

system("PAUSE");

return 0;

}

6.4.5.2姓名

按照姓名查找

6.4.6排序

对数据进行排序

int sort()//排序

{

while(1)

{

system("cls");

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆请选择排序方式(降序)*\n");

printf("\t\t\t\t* 1.学号 *\n");

printf("\t\t\t\t* 2.姓名(测试) *\n");

printf("\t\t\t\t* 3.C语言成绩 *\n");

printf("\t\t\t\t* 4.英语成绩 *\n");

printf("\t\t\t\t* 5.高数成绩 *\n");

printf("\t\t\t\t* 6.平均分 *\n");

printf("\t\t\t\t* 0.返回主菜单 *\n");

printf("\t\t\t\t******************************\n\n");

switch(getch())

{

case '1':printf("按照【学号】排序如下: \n");sortswitch(1);break;

case '2':printf("按照【姓名(测试)】排序如下:\n");sortswitch(2);break;

case '3':printf("按照【C语言成绩】排序如下: \n");sortswitch(3);break;

case '4':printf("按照【英语成绩】排序如下: \n");sortswitch(4);break;

case '5':printf("按照【高数成绩】排序如下: \n");sortswitch(5);break;

case '6':printf("按照【平均分】排序如下: \n");sortswitch(6);break;

case '0':return 0;break;

default :printf("输入有误!请重新输入。\n");Sleep(500);

}

}

}

6.4.6.1学号

按照学号排序

intsortswitch(int x)//子排序

{

structst t,s0[N];

inti,j,k=0;

FILE *fp;

fp=fopen("data.dat","rb");

fread(s,stlen,tot,fp);

fclose(fp);

for(i=0;i

{

if(s[i].flag==0)

s0[k++]=s[i];

}

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(x==1&&strcmp(s0[k].num,s0[j].num)>0)k=j;

if(x==2&&strcmp(s0[k].name,s0[j].name)>0)k=j;

if(x==3&&s0[k].cpp

if(x==4&&s0[k].eng

if(x==5&&s0[k].math

if(x==6&&s0[k].ave

if(k!=i){t=s0[i];s0[i]=s0[k];s0[k]=t;}

}

}

printf("序号\t学号\t姓名\tC语言\t英语\t高数\t平均分\n");

for(i=0;i

printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",

s0[i].no,s0[i].num,s0[i].name,s0[i].cpp,s0[i].eng,s0[i].math,s0[i].ave);

system("PAUSE");

return 0;

}

6.4.6.2姓名

按照姓名排序

6.4.6.4C语言成绩

按照C语言排序

6.4.6.4英语成绩

按照英语成绩排序

6.4.6.5 高数成绩

按照高数成绩排序

6.4.6.6 平均分

按照平均分排序

6.4.7另存为

另存为文件

6.4.7.1TXT文件

导出TXT文件类型

6.4.7.2XLS文件

导出XLS文件类型

int save()//保存

{

system("cls");

while(1)

{

system("cls");

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆请选择导出方式: *\n");

printf("\t\t\t\t* 1.txt文本文档 *\n");

printf("\t\t\t\t* 2.xls表格文件 *\n");

printf("\t\t\t\t* 0.返回主菜单 *\n");

printf("\t\t\t\t******************************\n");

intch=getch();

if(ch=='0')return 0;

if(ch=='1'||ch=='2')

{

FILE *fp;

if(ch=='1')fp=fopen("data.txt","w");

if(ch=='2')fp=fopen("data.xls","w");

fprintf(fp,"序号\t学号\t姓名\tC语言\t英语\t高数\t平均分\n");

for(inti=0;i

if(s[i].flag==0)

fprintf(fp,"%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",

s[i].no,s[i].num,s[i].name,s[i].cpp,s[i].eng,s[i].math,s[i].ave);

fclose(fp);

printf("导出成功!\n");

}

if(!(ch=='0'||ch=='1'||ch=='2'))printf("输入有误!请重新输入。\n");

Sleep(500);

}

}

6.5回收站

显示回收站数据,并进行操作

int recycle()//回收站

{

if(tot==flag0)

printf("无数据!\n");

else

{

display(1);

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆以上为回收站数据: *\n");

printf("\t\t\t\t* ◆请选择操作: *\n");

printf("\t\t\t\t* 1.多项恢复 *\n");

printf("\t\t\t\t* 2.全部恢复 *\n");

printf("\t\t\t\t* 3.多项彻底删除 *\n");

printf("\t\t\t\t* 4.清空回收站 *\n");

printf("\t\t\t\t* ▲【其他键】返回主菜单 *\n");

printf("\t\t\t\t******************************\n");

switch(getch())

{

case '1':

{

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆输入【序号】恢复 *\n");

printf("\t\t\t\t* ◆多项之间加【空格】 *\n");

printf("\t\t\t\t******************************\n");

part(0);

printf("数据恢复成功!正在返回上一级。\n");

}break;

case '2':

{

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆确定【全部恢复】吗? *\n");

printf("\t\t\t\t* ■【回车键】恢复 *\n");

printf("\t\t\t\t* ▲【其他键】取消恢复 *\n");

printf("\t\t\t\t******************************\n");

if(getch()==13)

{

all(0);

printf("全部恢复成功!正在返回上一级。\n");

}

else

printf("您已取消全部恢复,正在返回上一级。\n");

}break;

case '3':

{

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆输入【序号】彻底删除 *\n");

printf("\t\t\t\t* ◆多项之间加【空格】 *\n");

printf("\t\t\t\t******************************\n");

delpart();

printf("彻底删除成功!正在返回上一级。\n");

}break;

case '4':

{

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆确定【清空回收站】吗?*\n");

printf("\t\t\t\t* ■【回车键】确认 *\n");

printf("\t\t\t\t* ▲【其他键】取消 *\n");

printf("\t\t\t\t******************************\n");

if(getch()==13)

{

delall();

printf("清空回收站成功!正在返回上一级。\n");

}

else

printf("您已取消清空回收站,正在返回上一级。\n");

}break;

}

}

Sleep(500);

return 0;

}

6.5.1多项恢复

多项恢复数据

int part(int t)//部分

{

int x[N],i=0,co=0;

while(1)

{

scanf("%d",&x[i]);co++;

if(x[0]==0)return 0;

if(x[i++]==0)break;

}

printf("操作的学生序号为:");

for(i=0;i

printf("%d ",x[i]);

printf("\n确认操作请按【回车键】,否则按【其他键】\n");

if(getch()==13)

{

if(t==1)flag0-=(co-1);

if(t==0)flag0+=(co-1);

FILE *fp;

fp=fopen("data.dat","wb+");

for(inti=0;i

s[x[i]-1].flag=t;//替换的值

fwrite(s,stlen,tot,fp);

fclose(fp);

}

else

return 0;

}

6.5.2全部恢复

全部恢复数据

int all(int t)//全部

{

if(getch()==13)

{

if(t==1)flag0=0;

if(t==0)flag0=tot;

FILE *fp;

fp=fopen("data.dat","wb+");

for(int j=0;j

s[j].flag=t;//替换的值

fwrite(s,stlen,tot,fp);

fclose(fp);

}

else

return 0;

}

6.5.3多项彻底删除

多项彻底删除数据

intdelpart()//部分

{

structst s2[N];

int x[N],i=0,j=0,co=0,k=1;;

while(1)

{

scanf("%d",&x[i]);co++;

if(x[0]==0)return 0;

if(x[i++]==0)break;

}

printf("操作的学生序号为:");

for(i=0;i

printf("%d ",x[i]);

printf("\n确认操作请按【回车键】,否则按【其他键】\n");

if(getch()==13)

{

for(i=0;i

s[x[i]-1].flag=2;//替换的值

for(i=0;i

{

if(s[i].flag!=2)

{

s2[j++]=s[i];

s2[j-1].no=k++;

}

}

tot=tot-co+1;

FILE *fp;

fp=fopen("data.dat","wb+");

fwrite(s2,stlen,tot,fp);

fclose(fp);

}

else

return 0;

}

6.5.4清空回收站

清空回收站数据

intdelall()//全部

{

structst s2[N];

inti=0,j=0,k=1;

for(i=0;i

{

if(s[i].flag==0)

{

s2[j++]=s[i];

s2[j-1].no=k++;

}

}

tot=flag0;

FILE *fp;

fp=fopen("data.dat","wb+");

fwrite(s2,stlen,tot,fp);

fclose(fp);

return 0;

}

6.6重置系统

重置系统

int reset()//重置

{

printf("\t\t\t\t******************************\n");

printf("\t\t\t\t* ◆确定【重置系统】吗? *\n");

printf("\t\t\t\t* ◆重置后数据不可恢复 *\n");

printf("\t\t\t\t* ■【回车键】确认 *\n");

printf("\t\t\t\t* ▲【其他键】取消 *\n");

printf("\t\t\t\t******************************\n");

if(getch()==13)

{

FILE *fp;

fp=fopen("data.dat","w");

fclose(fp);

tot=0;

flag0=0;

printf("重置成功!正在返回上一级。\n");

}

else

printf("您已取消重置,正在返回上一级。\n");

Sleep(500);

return 0;

}

7.总结

本学生管理系统模仿电脑操作系统设计,充分体现了此系统的人性化以及个性化。

本系统突出特点是添加了回收站功能,还增加了再次确认键,防止数据的误删。并且数据输入后立即保存到文件中去,不用再次选择保存,简化了操作。

本系统存在的缺陷是,每次输出显示时都需读取文件,延迟了显示速度,但也确保了数据的准确性。由于时间紧促,代码部分整理不够美观,但是不影响操作。未检查数据的输入是否合法,可能会出现乱码或死循环的情况。

本系统需要改进的方面是,代码可以简化一部分,并且需要加上判断,看数据输入是否合法。

课程感受是,编写此系统就花费了我接近48小时时间,中间的调试以及错误的修改浪费了大部分时间,做程序前需要把全部思路和机构图整理好在进行。否则,代码全是BUG。

8.附件

链接:

http://pan.baidu.com/s/1kUPhq8v

文件:

9.参考书目

1.杨路明 《C语言程序设计教程》(第3版)北京邮电大学出版社 2016.5

2.谭浩强 《C程序设计》(第四版)清华大学出版社 2014.4

3.谭浩强 《C程序设计题解和上机指导》(第四版) 2014.4

免费下载 Word文档免费下载: 学生成绩管理系统实验报告

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服