+
《面向对象程序设计(C#)》
实训报告
(2011/20##学年第二学期)
系 别:
班 级: 1
姓 名:
学 号:
指导教师:
设计时间:1周(2012.6.4--2012.6.8)
二〇##年六月四日
实训项目:学生信息管理系统
一、实训目的
1、掌握VS.NET 2008集成开发环境;
2、并通过VS.NET 20## 来开发控制台应用程序和Windows应用程序,掌握解决实际应用问题的思路、方法和步骤;
3、Visual Studio .NET调试方法和技巧;
4、体会软件开发的流程和规范,熟悉常用开发工具;
5、培养学员团队开发和协同工作的能力,熟悉团队成员的角色分工及沟通;
6、强化与巩固《C#程序设计》所学习的课程知识内容;加强单元测试与联调;
7、激发学生的创造性,培养学生的团队精神。
二、实训要求
1.要求学生在实训期间,做好实训日记、以及实训所得资料、内容的整理工作。实训结束时,写民实训报告并有实训作品。实训报告内容详略得当。
2.实训结束前,需要提交实训的最终作品,指导老师对所有学生提交的作品进行审核并组织学生答辩,当场给出设计成绩。
3.实训要在机房中计算机上完成整个程序的调试,通过实训,应使学生达到以下要求:
² 熟悉.Net的开发环境。
² 掌握C#中的数据类型、变量、常量、表达式和运算符;
² 掌握C#中顺序结构、选择结构、循环结构的编写,语句的实现。使学生养成良好的编程习惯。培养分析、解决问题的能力。
² 掌握可用对象、数组对象、类以及方法,能够对异常进行正确处理和排错。
三、试验性质
自主设计实验
四、实训内容
主要是通过所学的相关类的知识编写一个《学生成绩管理》的控制台应用程序;所要实现的功能均模拟数据库的增删改查操作,以下为具体功能:
² 将学生成绩保存在文本文件中,所有的功能均针对文本文件进行操作;
² 实现添加学生基本信息及对应的成绩的功能;
² 实现删除学生信息的功能,其中又分为:按学生姓名删除,按学生学号删除;
² 实现修改学生相关信息的功能,其中分为:按学生姓名修改,按学生学号修改;
² 实现查询功能,其中分为:按学生学号进行查询,按学生姓名进行查询。
五、实训步骤
(1)新建一个 “Windows”控制台应用程序项目,将程序文件的名称更改为“xsgl.cs”。
(2)设计程序,显示登录提示信息“请输入命令”界面,参考界面如下,输入“1”命令,会显示帮助信息,用户输入相应的命令,可以执行不同的操作。
(3)输入“2”命令,要求用输入登录“用户名”及“密码”,验证成功后,才可以执行相关的查找,插入和删除操作。登录错误,要显示相关的错误信息。
如下图:
(4) 输入“3”命令,进行添加学生信息,按要求输入,显示“信息添加成功!”,出错,要显示相关的错误信息。如下图:
(5) 输入“4”命令,进行删除学生信息,按要求输入,显示“信息删除成功!”,出错,要显示相关的错误信息。如下图:
(6) 输入“5”命令,进行查询学生信息,按要求输入,显示所查询的信息,
(7) 输入“0”命令,将退出程序。
(8) 各模块功能实现源代码:
1、 主函数
static void Main(string[] args)
{
Do_sth .Dohelp ();
int x = int.Parse(Do_sth.Input(">请输入命令(0-5)"));
while (x != 0)
{
if (x == 1)
{ Do_sth.Dohelp(); }
if (x == 2)
{ Do_sth.Login(); }
if (x == 3)
{ Do_sth.Add(); }
if (x == 4)
{ Do_sth.Delete(); }
if (x == 5)
{ Do_sth.Select(); }
x = int.Parse(Do_sth.Input(">请输入命令(0-5)"));
}
Console.ReadLine();
}
2、 “help” 显示帮助
public static void Dohelp()
{
Console.WriteLine("——学生管理系统——");
Console.WriteLine(" 1.help:显示帮助");
Console.WriteLine(" 2.login:登录系统");
Console.WriteLine(" 3.add:添加学生信息");
Console.WriteLine(" 4.delete:删除学生信息");
Console.WriteLine(" 5.select:查找学生信息");
Console.WriteLine(" 0.exit:退出\n");
}
3、 “login” 登陆系统
public static void Login()
{
Console.WriteLine("请输入登录信息");
Console.Write(">");
try
{
string uName = Do_sth.Input("请输入用户名");
string uPass = Do_sth.Input("请输入密码");
string admInfo="";
FileStream fs = new FileStream("D:/zxh.txt", FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs,Encoding .Default );
admInfo = sr.ReadLine();
sr.Close();
fs.Close();
string[] admAry = admInfo.Split(',');
if ((admAry[0] == uName) && (admAry[1] == uPass))
{
Console.WriteLine(" 登录成功!");
return;
}
}
catch (Exception ex)
{
string StuInfo = Do_sth.Input("出错" + ex.ToString());
}
}
4、 “add” 添加信息
public static void Add()
{
string StuInfo =Do_sth .Input ("请输入学生信息:学号,姓名,成绩");
try
{
FileInfo fi = new FileInfo("D:/zxh.txt");
using (StreamWriter sw = fi.AppendText())
{
sw.WriteLine(StuInfo );
sw.Flush();
sw.Close();
}
Console.WriteLine(" 信息添加成功!");
}
catch (Exception ex)
{
Console.WriteLine("信息添加失败" + ex.ToString());
}
}
5、 “delete” 删除信息
public static void Delete()
{
string StuId = Do_sth.Input("请输入要删除的学生学号");
List <string > StuList=new List<string> ();
try
{
string admInfo = "";
FileStream fs = new FileStream("D:/zxh.txt", FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs, Encoding.Default);
admInfo =sr.ReadLine ();
while (admInfo !=null &&admInfo !="")
{
string[] admAry = admInfo.Split(',');
if (admAry [0]!=StuId )
{
StuList .Add (admInfo );
}
admInfo =sr.ReadLine ();
}
sr.Close ();
fs.Close ();
FileStream fs2 = new FileStream("D:/zxh.txt", FileMode.Create, FileAccess.Write);
using (StreamWriter sw = new StreamWriter(fs2, Encoding.Default))
{
foreach (string Stu in StuList)
{
sw.WriteLine(Stu );
}
sw.Flush();
sw.Close();
}
fs2.Close();
Console.WriteLine(" 信息删除成功!");
}
catch (Exception ex)
{
Console.WriteLine("出错" + ex.ToString());
}
}
6、 “select” 查找信息
public static void Select()
{
string StuCh = Do_sth.Input("请输入要查询的学生学号");
List<string> StuList = new List<string>();
string admInfo = "";
FileStream fs = new FileStream("D:/zxh.txt", FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs, Encoding.Default);
admInfo = sr.ReadLine();
while (admInfo != null && admInfo != "")
{
string[] admAry = admInfo.Split(',');
if (admAry[0] == StuCh)
{
StuList.Add(admInfo);
}
admInfo = sr.ReadLine();
}
sr.Close();
fs.Close();
foreach (string Stu in StuList)
{
Console.WriteLine(Stu );
}
}
六、实训总结
通过一周的实训,让我意识到,虽然C#以已经学了一学期,但是到了真正写代码的时候,我对以前所学的知识还是有些陌生,不知道该从哪着手。这次实训在老师的指导和同学的帮助下,我终于完成了程序的编写与运行。
当然在编写过程中并不是一帆风顺的,总是会遇到这样那样的问题。比如说:最基本的有漏写;或};会把变量的定义给漏掉等。在这次实训中,我试着总结出C#程序编码步骤:
(1) 确定目的;
(2) 确定范围;
(3) 规范内容;
(4) 编写程序;
(5) 编译运行;
这次实训不仅让我对以前所学知识有了一个更深的了解,更重要的是锻炼了我的动手能力,也让我们把所学的知识转化到实际应用当中。
第二篇:c程序实训报告
课题:图书管理系统
院系:电子工程系
学生:张翰
学号:1052100606
指导老师:黄建灯
日期:20##-7-5
桂林电子科技大学信息科技学院
图书管理系统
摘要:设计图书管理系统,通过分别定义两个数据体来存储书籍和借书卡信息,并建立他们的联系以达到结束和还书的目的,通过main函数来实现各个功能模块的调用。在设计过程中感到了自己的严重不足,需要进一步的努力!
关键词:图书 借书卡 数据体 函数 模块
一,课题解析
我所选择的课题是图书管理系统,这个课题要求我们用C语言设计一个界面友好,功能完善,实用性强的系统。而一个实用的图书管理系统,应当包含有以下功能:
(1),从借阅者的角度出发,应当要实现查找书籍、借阅书籍、归还书籍这些基本功能,为方便借阅者查找,还应当提供按书名或者作者名的多种查找方式。
(2),从管理者的角度出发,应当能对图书库进行编辑,包括添加书籍(书名、作者、编号、出版社等)、删除书籍、统计书籍总数的功能,同时,也要对借书卡进行管理,包括添加新的借书卡和删除旧的借书卡。
二.框架结构
程序运行的主界面:
管理系统界面:
三.程序的实现
1.结构体的定义
(1).书籍的结构体
struct book//定义书的结构体
{ char bookname[30];
char booknum[15];
char writer[10];
char publisher[20];
int kucun;
} A[500];
int num=0;
在这个数组里定义了书的五个变量,包括书名,编号,作者,出版社以及库存。
(2).借书卡的结构体
struct card//定义借书卡的结构体
{char cardname[16];
char cardnum[11];
char booknum1[15];
}B[200];
int num1=0;
这里定义的借书卡有三个变量,持卡人姓名,卡号,以及此卡所借书籍的编号。
2.各个功能模块
(1)查找图书模块:分别设计了两个查找函数,函数1通过书籍的名字查找,函数2通过书籍作者查找,比较方便使用。
void findbook()//查找图书函数1
{ int i;
char str[30];
getchar();
printf("请输入您要查找的书名:\n");
gets(str);
for(i=0;i<num;i++)
if( strcmp(str,A[i].bookname)==0)
{ printf("书名:%s 编号:%s 作者:%s 出版社:%s 库存:%d \n\n",A[i].bookname,A[i].booknum,A[i].writer,A[i].publisher,A[i].kucun);
break;
}
if(i>=num) printf("您所查找的图书不存在!\n");
}
void findbook1()//查找图书函数2
{ int i;
char str[10];
getchar();
printf("请输入您要查找的作者名:\n");
gets(str);
for(i=0;i<num;i++)
if( strcmp(str,A[i].writer)==0)
{printf("书名: %s 编号: %s 作者:%s 出版社:%s 库存:%d \n\n",A[i].bookname,A[i].booknum,A[i].writer,A[i].publisher,A[i].kucun);
break;
}
if(i>=num) printf("您所查找的图书不存在!\n\n");
}
(2).借阅图书模块
这个模块实现的是借书的功能,首先运用查找功能找到想要借阅的图书,然后查找到自己的借书卡,通过下标关联到一起,书的变量库存减1,借书卡一个变量赋值为该书的编号,从而达到借书目的。
void lendbook()//借书函数
{
int i,j,s=0,s1=0;
char bn[11],sn[15],c;
do{
printf("输入要借的书的编号:");
scanf("%s",bn);
for(i=0;i<num;i++)
{
if(strcmp(bn,A[i].booknum)==0) {s=1;break;}
}
if(s==0) {printf("未找到该书!");continue;}
printf("请输入借阅者的卡号:");
scanf("%s",sn);
for(j=0;j<num1;j++)
{
if(strcmp(sn,B[j].cardnum)==0) {s1=1;break;}
}
if(s1==0) {printf("未找到该卡!\n");continue;}
else {
A[i].kucun=A[i].kucun-1;
strcpy(B[j].booknum1,A[i].booknum);
}
printf("借阅成功,是否继续(Y/N)?\n");
getch();
scanf("%c",&c);
}while(c=='y'||c=='Y');
}
(3).还书模块
还书功能的实现与借书类似,把该书的库存+1,同时对应的借书卡的变量值归零。
void huanbook()//还书函数
{
int i,j,s=0,s1=0;
char bn[11],sn[15],c;
do{
printf("输入要还书的编号:");
scanf("%s",bn);
for(i=0;i<num;i++)
{
if(strcmp(bn,A[i].booknum)==0) {s=1;break;}
}
if(s==0) {printf("未找到该书!");continue;}
printf("请输入您的卡号:");
scanf("%s",sn);
for(j=0;j<num1;j++)
{
if(strcmp(sn,B[j].cardnum)==0) {s1=1;break;}
}
if(s1==0) {printf("未找到该卡!");continue;}
else {
A[i].kucun=A[i].kucun+1;
B[j].booknum1==0;
}
printf("还书成功,是否继续(Y/N)?\n");
getch();
scanf("%c",&c);
}while(c=='y'||c=='Y');
}
(4).删除模块
运用查找功能找到想要删除的图书,赋值为0,书籍的数据体总数-1,查找时直接跳过。
void delbook()//删书函数
{int n,i,m;
char str[30];
printf("请输入您想删除的旧书的名字:\n");
getchar();
gets(str);
for(i=0;i<num;i++)
{
if(strcmp(str,A[i].bookname)==0)
{
for(n=i;n<num;n++)
A[i]=A[i+1];
num--;
m=1;
printf("删除成功!\n");break;
}
}
if(m==0) printf("没有这本书!\n");
}
(5).借书卡管理函数
这个函数实现了借书卡的增加和借书卡的删除功能,只有当数据体里面存在着相应的借书卡的时候,借书才能成功完成,否侧借书函数内会有出错提示。
void mcard()//卡管理函数
{int n,i,m,j;
char str[16];
char sn[11];
while(4)
{printf("========欢迎进入借书卡管理系统==========\n\n");
printf("1.增加借书卡号\n");
printf("2.删除借书卡号\n");
printf("0.返回\n\n");
printf("您的选择:");
scanf("%d",&n);
switch(n)
{
case 1:printf("请输入增加卡的数量:\n");
scanf("%d",&m);
num1=m;
printf("输入您的借书卡信息(姓名,卡号)\n");
for(i=0;i<m;i++)
scanf("%s%s",B[i].cardname,B[i].cardnum);
printf("新卡创建成功!\n");
break;
case 2:printf("请输入您要删除的旧卡姓名:\n");
getchar();
gets(str);
for(i=0;i<num1;i++)
{
if(strcmp(str,B[i].cardname)==0)
{
for(n=i;n<num1;n++)
B[i]=B[i+1];
num1--;
m=1;
printf("删除成功!\n");break;
}
}
if(m==0) printf("没有这张卡!\n");break;
}
if(n==0) break;
}
}
3.主函数
在主函数中,用了三个while循环语句,通过switch来选择相应的功能模块。
void main()
{ int ch1,ch2,ch3;
while(1)
{
printf("================欢迎进入尧山图书馆==============\n\n");
printf("\t\t1. 查找书籍\n\n");
printf("\t\t2. 借阅书籍\n\n");
printf("\t\t3. 归还书籍\n\n");
printf("\t\t4. 管理系统\n\n");
printf("\t\t0. 退出系统\n\n");
printf("===========书籍是人类进步的阶梯----高尔基========\n");
printf("请选择您的操作类型(0-4):\n");
scanf("%d",&ch1);
switch(ch1)
{
case 1: while(2)
{getchar();
printf("请选择您的查找方式:\n\n");
printf("1.按书名查找\n\n");
printf("2.按作者查找\n\n");
printf("0.返回\n\n");
printf("请输入0-2\n");
scanf("%d",&ch2);
switch(ch2)
{
case 1:findbook();break;
case 2:findbook1();break;
case 0:main();break;
default:printf("无此操作\n");break;
}
}
case 2: lendbook();break;
case 3: huanbook();break;
case 4:
while(3)
{
printf("==============欢迎进入图书管理系统==============\n\n");
printf("1.增加图书\n");
printf("2.删除图书\n");
printf("3.书籍统计\n");
printf("4.借书卡管理\n");
printf("0.返回\n");
printf("请输入0-4:\n");
scanf("%d",&ch3);
switch(ch3)
{
case 1:addbook();break;
case 2:delbook();break;
case 3:printf("当前图书馆共有%d本藏书\n",num);break; case 4:mcard();break;
}if(ch3==0) break;
}
}
if(ch1==0) break;}
}
四.实训总结
这次课程设计对于我们来说,有很大的难度。因为它要求我们较完整的去实现一个比较可行的程序。将其应用到实际的生活中去。我选中的题目是图书管理系统。这个题目相对来说贴近生活,比较容易理解。但是设计一个较为完整的程序却不是这么简单的。
一开始在做这个系统的过程中发现自己C的水平很低,在刚开始时完全是一头雾水,不清楚这个系统应该是从哪里下手,不明白该怎么处理各种功能要求,把这些要求揉和到语言中去。后来在老师的指点下,学会了对整体框架进行架构。之后又参考了别人的成品,虽然大多数都采用了文件存贮,但是还是对我的这个程序有很大的参考价值。这可以看出我们在学习中应该多阅读程序,多看别人好的程序是怎么运行的,这样才能慢慢的学会自己去说去做。
同时通过这一周的程序及报告编写,我也发现了自己的很多不足,自己知识的很多漏洞,看到了自己理论联系实际的能力还是比较脆弱。尤其是编写大型的程序所要拥有的知识和技能比较缺乏。程序编好了,还要经过调试和修改,这步也很关键,好的程序是经过了无数次的修改和调试才产生的。我的程序基本上能够满足要求,但还有一些地方需要改进,在今后我应该在多看书的同时还要加强实践的练习。才能进一步提高自己的编程能力。