第一篇:C语言课程设计销售管理系统报告
报告正文
1、题目与要求:
1.1 某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当日出售的每种产品各写一张便条交上来。每张便条内容有 销售员的代号 产品的代号
这种产品当天的销售额
1.2 每位销售员每天可能上缴0-5张便条。假设手机到了上个月的所有便条,编写一个处理系统,读取上月的销售情况(自己设定),进行如下处理: 计算上个月没人每种产品的销售额
按销售额对销售员进行排序,输出排序结果(销售员代号)
统计每种产品的总销售额,对这些产品从高到低的顺序输出结果(须输出产品的代号和销售额) 输出统计报表
2、需求分析
本程序将用到文件系统,list.txt文件内容作为数据源,其中单行内容代表一张纸条。程序运行后首先将文件系统的原始数据读取并保存到程序的结构体数组当中,所以应提供文件输入的操作;由于纸条数据零散,所以要对原始数据进行分类操作并提供一个数组用于保存分类信息;在程序中要进行统计工作,所以要提供显示、排序等操作;另外应提供键盘式选择菜单实现功能选择。
3、功能实现设计
3.1总体设计
根据上面的分析,可以将这个系统分为如下五大模块:查看每人每种产品的销售额、按销售额对销售员排序、对每种产品总销售额从高到低排序、输出统计报表和退出。其中主要模块是前四个模块。
3.2流程图
3.3详细设计:
3.3.1【头文件和预定义】 #include
#include
原始数据有销售员代号、产品代号和销售额,所以定义一个全局结构体数组scrip用于保存原始数据。然后定义全局变量n保存纸条数目,定义数组s用于保存分类后的信息。struct ss { int sid;//销售员代号
int pid;//产品代号
int sn;//销售额 }ss[M];int n;//纸条数目
int s[4][5]={{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}};//用于保存员工和产品信息 3.3.4【主函数】
显示程序设计者相关信息和调用文件读取函数、数据初始化函数和主菜单函数 void main()//入口函数,即主函数 { readdata();//读取文件数据
foreach();//根据文件初始数据初始化便于操作的数组 menu();//显示主菜单 } 3.3.4-1【文件读取函数】readdata()读出便条中的内容,并保存到文件结构体中
void readdata()//从文件读取数据 { FILE *fp;if((fp=fopen(“list.txt”,“r”))==NULL){
printf(“Can't open the file!n”);
exit(0);} else
for(n=0;!feof(fp);n++)
{
fscanf(fp,“%d %d %dn”,&ss[n].sid,&ss[n].pid,&ss[n].sn);
} //保存文件数据到结构体
fclose(fp);} 3.3.4-2【文件读取函数】foreach()将保存到结构体中的信息按产品分类,再根据销售员进行分类,将信息存到数组当中。
void foreach()//从纸条读取数据并分类整理 { int i;for(i=0;i { switch(ss[i].pid) //按产品分大类,根据大类分销售员小类,累加个人各产品销售数量 { case 1: switch(ss[i].sid) { case 1:s[0][0]+=ss[i].sn;break; case 2:s[1][0]+=ss[i].sn;break; case 3:s[2][0]+=ss[i].sn;break; case 4:s[3][0]+=ss[i].sn;break; } break; case 2: switch(ss[i].sid) { case 1:s[0][1]+=ss[i].sn;break; case 2:s[1][1]+=ss[i].sn;break; case 3:s[2][1]+=ss[i].sn;break; case 4:s[3][1]+=ss[i].sn;break; } break; case 3: switch(ss[i].sid) { case 1:s[0][2]+=ss[i].sn;break; case 2:s[1][2]+=ss[i].sn;break; case 3:s[2][2]+=ss[i].sn;break; case 4:s[3][2]+=ss[i].sn;break; } break; case 4: switch(ss[i].sid) { case 1:s[0][3]+=ss[i].sn;break; case 2:s[1][3]+=ss[i].sn;break; case 3:s[2][3]+=ss[i].sn;break; case 4:s[3][3]+=ss[i].sn;break; } break; case 5: switch(ss[i].sid) { case 1:s[0][4]+=ss[i].sn;break; case 2:s[1][4]+=ss[i].sn;break; case 3:s[2][4]+=ss[i].sn;break; case 4:s[3][4]+=ss[i].sn;break; }; break;} } } 3.3.4-3【主菜单函数】menu()显示系统功能菜单以供用户选择相关功能使用,根据用户选择分别可调用 detail():计算上个月每个人每种产品的销售额 seller():按销售额对销售员进行排序,输出排序结果(销售员代号)product():统计每种产品的总销售额,对这些产品按从高到低的顺序输出排序结果(需输出产品代号和销售额)exit(0):退出系统 void menu(){ int w,c;do{ puts(“tt*********菜单*********************nn”);puts(“tt 1.查看每人每种产品的销售额n”);puts(“tt 2.按销售额对销售员排序(销售员代号)n”);puts(“tt 3.对每种产品总销售额从高到低排序(产品代号和销售额)n”);puts(“tt 4.输出统计报表n”);puts(“tt 5.退出n”);puts(“nntt*********************************************n”);printf(“请选择(1-5):[ ]bb”);scanf(“%d”,&c);if(c<1||c>5)//错误输入则重新获取输入 { w=1;getchar();} else w=0;} while(w==1); switch(c)//根据输入实现相应函数调用 { case 1: detail();break;//每个销售员每种产品的销售额统计 case 2: seller();break;case 3: product();break;case 4: total();break;case 5: exit(0);} } 3.3.5【功能函数】 5-1【每人每种产品销售额统计函数】detail()计算上个月每个人每种产品的销售额 void detail()//显示销售情况 { int i,j;for(i=0;i<4;i++)//遍历销售员 { printf(“ntt%d号销售员销售情况:n”,i+1); for(j=0;j<5;j++) //按销售员分类遍历所有产品并显示信息 printf(“tt%d号产品销售数量:%dn”,j+1,s[i][j]); } choice();} 3.3.5-1【销售员销售业绩排序函数】seller()按销售额对销售员进行排序,输出排序结果(销售员代号)void seller(){ int i,j,k;int sp[4]={0,0,0,0};for(i=0;i<4;i++) for(j=0;j<5;j++) sp[i]+=s[i][j];//计算每单个销售员所有产品销售数量 for(i=0;i<4;i++)//比较四次,每次选出最大数 { k=0;//用于标记单轮最大数 for(j=0;j<4;j++) if(sp[k] printf(“tt第%d名是%d号销售员!n”,i+1,k+1);sp[k]=-1; //输出最大数和排名,将最大数标记为负 } choice();} 3.3.5-2【总销售额统计函数】void product()统计每种产品的总销售额,对这些产品按从高到低的顺序输出排序 void product()//与seller()原理一样,用于对产品进行统计 { int i,j,k;int p[5]={0,0,0,0,0};for(j=0;j<5;j++) for(i=0;i<4;i++) p[j]+=s[i][j]; for(j=0;j<5;j++) { k=0; for(i=0;i<5;i++) if(p[k] printf(“tt第%d名是%d号产品!t销量为%d!n”,j+1,k+1,p[k]);p[k]=-1; } choice();} 3.3.5-3【统计报表输出函数】total()统计每种产品的总销售额,对这些产品按从高到低的顺序输出排序结果(需输出产品代号和销售额) void total()//输出报表 { int i,j;printf(“nt销售员t产品t销量n”);for(i=0;i<4;i++) for(j=0;j<5;j++) printf(“t %dt %dt %dn”,i+1,j+1,s[i][j]);choice();} 3.3.6【公共函数】 【选择函数】choice()选择退出系统或则返回主菜单 void choice()//用于输出信息功能选择 { int c;printf(“请选择接下来想做什么t1>返回菜单t2>退出系统scanf(”%d“,&c);if(c==1)menu();else exit(0);puts('n');} 4、运行结果(附带抓图) List.txt(便条)文件中数据如下: 2 3 4 1 [ ]bb”);3 运行结果 显示主菜单: 查看每人每种产品的销售额运行结果: 按销售额对销售员排序运行结果: 对每种产品销售额从高到低排序运行结果: 统计报表运行结果: 5、总结 通过这次C程序设计,我掌握了模块化设计方法,能够深入的理解结构化程序设计思想,熟练运用结构化程序设计方法,提高了运用C语言进行程序设计的能力。此外我还熟悉了,对于文件读写的操作。更重要的是对程序的调试有了显著的提高。我发现我对程序的设计越来越感兴趣了,我决定今后在这一方面下一番功夫,取得一些成绩。 6、源程序 #include int pid;//产品代号 int sn; //销售额 }ss[M];int n; //纸条数目 int s[4][5]={{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}};//用于保存员工和产品信息 void main()//入口函数,即主函数 { p readdata();//读取文件数据 foreach(); //根据文件初始数据初始化便于操作的数组 menu(); //显示主菜单 } void readdata() //从文件读取数据 { FILE *fp;if((fp=fopen(“list.txt”,“r”))!=NULL){ printf(“Can't open the file!n”); exit(0);} else for(n=0;!feof(fp);n++) { fscanf(fp,“%d %d %dn”,&ss[n].sid,&ss[n].pid,&ss[n].sn); } //保存文件数据到结构体 fclose(fp);} void foreach() //从纸条读取数据并分类整理 { int i;for(i=0;i //遍历所有纸条 { switch(ss[i].pid) //按产品分大类,根据大类分销售员小类,累加个人各产品销售数量 { case 1: switch(ss[i].sid) { case 1:s[0][0]+=ss[i].sn;break; case 2:s[1][0]+=ss[i].sn;break; case 3:s[2][0]+=ss[i].sn;break; case 4:s[3][0]+=ss[i].sn;break; } break; case 2: switch(ss[i].sid) { case 1:s[0][1]+=ss[i].sn;break; case 2:s[1][1]+=ss[i].sn;break; case 3:s[2][1]+=ss[i].sn;break; case 4:s[3][1]+=ss[i].sn;break; } break; case 3: switch(ss[i].sid) { case 1:s[0][2]+=ss[i].sn;break; case 2:s[1][2]+=ss[i].sn;break; case 3:s[2][2]+=ss[i].sn;break; case 4:s[3][2]+=ss[i].sn;break; } break; case 4: switch(ss[i].sid) { case 1:s[0][3]+=ss[i].sn;break; case 2:s[1][3]+=ss[i].sn;break; case 3:s[2][3]+=ss[i].sn;break; case 4:s[3][3]+=ss[i].sn;break; } break; case 5: switch(ss[i].sid) { case 1:s[0][4]+=ss[i].sn;break; case 2:s[1][4]+=ss[i].sn;break; case 3:s[2][4]+=ss[i].sn;break; case 4:s[3][4]+=ss[i].sn;break; }; break; } } } void menu(){ int w,c;do{ puts(“tt********************菜单*********************nn”); puts(“tt 1.查看每人每种产品的销售额n”); puts(“tt 2.按销售额对销售员排序(销售员代号)n”); puts(“tt 3.对每种产品总销售额从高到低排序(产品代号和销售额)n”); puts(“tt 4.输出统计报表n”); puts(“tt 5.退出n”); puts(“nntt*********************************************n”); printf(“请选择(1-5):[ ]bb”); scanf(“%d”,&c); if(c<1||c>5) //错误输入则重新获取输入 { w=1; getchar(); } else w=0;} while(w==1); switch(c) //根据输入实现相应函数调用 { case 1: detail();break;//每个销售员每种产品的销售额统计 case 2: seller();break;case 3: product();break;case 4: total();break;case 5: exit(0); } } void detail() //显示销售情况 { int i,j; for(i=0;i<4;i++) //遍历销售员 { printf(“ntt%d号销售员销售情况:n”,i+1); for(j=0;j<5;j++) //按销售员分类遍历所有产品并显示信息 printf(“tt%d号产品销售数量:%dn”,j+1,s[i][j]); } choice();} void seller(){ int i,j,k;int sp[4]={0,0,0,0};for(i=0;i<4;i++) for(j=0;j<5;j++) sp[i]+=s[i][j]; //计算每单个销售员所有产品销售数量 for(i=0;i<4;i++) //比较四次,每次选出最大数 { k=0; //用于标记单轮最大数 for(j=0;j<4;j++) if(sp[k] //获取最大数标号 printf(“tt第%d名是%d号销售员!n”,i+1,k+1);sp[k]=-1; //输出最大数和排名,将最大数标记为负 } choice();} void product() //与seller()原理一样,用于对产品进行统计 { int i,j,k;int p[5]={0,0,0,0,0};for(j=0;j<5;j++) for(i=0;i<4;i++) p[j]+=s[i][j]; for(j=0;j<5;j++) {k=0; for(i=0;i<5;i++) if(p[k] printf(“tt第%d名是%d号产品!t销量为%d!n”,j+1,k+1,p[k]);p[k]=-1;} choice();} void total() //输出报表 { int i,j;printf(“nt销售员t产品t销量n”);for(i=0;i<4;i++) for(j=0;j<5;j++) printf(“t %dt %dt %dn”,i+1,j+1,s[i][j]); choice();} void choice() //用于输出信息功能选择 { int c;printf(“请选择接下来想做什么t1>返回菜单t2>退出系统 [ ]bb”);scanf(“%d”,&c);if(c==1)menu();else exit(0);puts('n');} 销售管理系统一.项目简介 随着计算机技术的迅猛发展,存在于网络的企业销售管理系统将逐步代替传统的管理模式进入企业。为了更高效得完成销售方面的工作,也可以有更多的时间处理更多的别的事务,企业也将摆脱原有的管理形势完全进入信息化管理。销售管理系统在企业的管理过程中起着巨大的作用 二.功能需求 一个销售管理系统,设计者的目标是满足公司运营和日常管理的需要,具有对产品,客户管理的功能。客户登录销售管理系统进行售后服务查询,销售员可以对销售的产品进行登记,并将销售情况反馈给数据库。为管理的方便性和信息传递的快速性提供了一个很好的平台。系统开发的总体任务是实现售后服务及销售登记自动化。总之,销售管理系统要实现登陆验证、商品销售管理、商品销售报表管理、客户信息管理四大部分。1.客户对功能的需求 1>查看自己的信息,了解自己近期的购买情况。2>查看产品的信息,熟悉产品情况。2>查看售后服务信息。 2.销售人员对功能的需求 1>查看自己的信息,了解自己近期的销售情况。2>查看产品的信息,熟悉产品情况。3>登记销售产品。 4>添加新产品,并填写产品相关信息。 3.售后服务人员对功能的需求 1>查看售后服务信息。2>添加售后服务信息。 三.分析模型时序图 销售管理系统顶层图 1.客户管理 第三层DFD图 客户管理子系统 2.销售管理 第三层DFD图 销售管理子系统 3.售后服务管理 第三层DFD图 售后服务管理子系统 4.客户登录动态时序图为 四.模块活动图,登录流程图 1.注册、登陆模块 1>模块功能描述 该模块主要实现对用户能否进入系统的确认以及对进入系统的用户权限的设定;因为本系统涉及到三类使用者,不可能每一类用户都具有相同的操作权限,如前所说,必然会早成系统的混乱和崩溃,严重影响其安全性和有效性。所以采取在通常的注册,登录模式下加上用户类型的选择,非常简洁地就完成了对用户类型的区别及权限的划分。2>在模块的详细设计后,便能得出实现该部分的具体流程,如图 用户注册模块程序流程图 登录模块程序流程图 活动图为: 2.客户管理模块 1>模块功能描述 显示客户的基本信息。库户可以查看自己的等级和交易次数。 2>在模块的详细设计后,便能得出实现该部分的具体流程,如图3-8。 客户管理模块流程图 活动图为: 3.销售管理模块 >模块功能描述 在这个模块可以登记销售记录。并且在提交记录时,更新数据库: (1)更新客户信息。如果是“老客户”系统会按照客户等级给出对应的优惠价。(2)更新产品信息。主要是更新该产品数量。 2>在模块的详细设计后,便能得出实现该部分的具体流程,如图 销售管理模块流程图 活动图为 五.数据库设计 1.客户信息表 字段khidkhnamegyshjchzhgzhugteladrkhtelfaxbzh数据类型IntVarCharVarCharVarCharnCharVarCharncharVarChartext是否是主键是否否否否否否否否是否为空否否否是是是否是是说明客户编号客户名称客户简称采购主管采购主管联系方式客户地址客户电话传真备注 2.商品进货表 字段数据类型intVarCharCharCharCharnumericnumericint是否是主键是否否否否否否否是否为空说明进货编号商品名称商品名称首拼大单位小单位进货成本jhbhshpmchshpshpddwxdwjhchbxshjgjhshulgyshjhrqbzh否否否否是否否否销售价格进货数量供应商进货日期备注VarCharsmalldatetimeVarChar否否否是否是 3.商品销售表 字段xshbhshpmchshpshpxshjgxshshlxshryxshrqkhbzh数据类型IntVarCharVarCharNumericIntVarCharSmalldatetimeVarChartext是否是主键是否否否否否否否否是否为空否否否是是是否是是说明销售编号商品名称商品名称首拼销售价格销售数量销售人员销售日期客户简称备注 六.运行界面与代码 1.登陆窗口 Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Private Sub CmdOk_Click()If UserName.Text <> “" And PassWord.Text <> ”“ Then Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ rs.Open ”select * from usermanage where username='“ & UserName.Text & ”'“, conn, 1, 1 If Not rs.EOF Then If rs(”password“)= PassWord.Text Then Main.Show Unload Me Else MsgBox ”非法登录,密码错误!“, vbOKOnly, ”警告“ End If Else MsgBox ”非法登录,找不到该用户!“, vbOKOnly, ”警告“ End If Else MsgBox ”用户名或密码不能为空!“, vbOKOnly, ”提示“ End If End Sub Private Sub PassWord_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then Call CmdOk_Click End If End Sub Private Sub UserName_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then Call CmdOk_Click End If End Sub `2.主界面 Private Sub Cmd_Click(Index As Integer)Select Case Index Case 0 GoodsIn.Show Me.Enabled = False Case 1 Saler.Show Me.Enabled = False Case 2 SaleData.Show Me.Enabled = False Case 3 SaleTotal.Show Me.Enabled = False Case 4 UserM.Show Me.Enabled = False End Select End Sub `进货管理 Private Sub Cmd_Click(Index As Integer)Select Case Index Case 0 '第一条 Adodc1.Recordset.MoveFirst Case 1 '上一条 If Not Adodc1.Recordset.BOF Then Adodc1.Recordset.MovePrevious End If Case 2 '下一条 If Not Adodc1.Recordset.EOF Then Adodc1.Recordset.MoveNext End If Case 3 '最尾条 Adodc1.Recordset.MoveLast Case 4 '添加 Adodc1.Recordset.AddNew For i = 0 To 7 GoodText(i).Enabled = True Next Cmd(6).Enabled = True Case 5 '修改 For i = 0 To 7 GoodText(i).Enabled = True Next Cmd(6).Enabled = True Case 6 '保存 Adodc1.Recordset.Update For i = 0 To 7 GoodText(i).Enabled = False Next MsgBox ”更新记录成功!“, vbOKOnly, ”提示“ Cmd(6).Enabled = False Case 6 '删除 If MsgBox(”确定删除当前记录,数据将不可恢复?“, vbOKCancel, ”提示“)= vbOK Then Adodc1.Recordset.Delete End If End Select End Sub Private Sub Form_Load()Adodc1.ConnectionString = ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ Adodc1.RecordSource = ”select * from save“ For i = 0 To 6 Set GoodText(i).DataSource = Adodc1 GoodText(i).DataField = Adodc1.Recordset.Fields(i).Name Next Adodc1.Refresh Set DataGrid1.DataSource = Adodc1 End Sub Private Sub Form_Unload(Cancel As Integer)Main.Enabled = True End Sub `销售管理 Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Public id As String Public action As String Private Sub Cmd_Click(Index As Integer)Select Case Index Case 0 '第一条 If Not Adodc1.Recordset.BOF Then Adodc1.Recordset.MoveFirst End If Case 1 '上一条 If Not Adodc1.Recordset.BOF Then Adodc1.Recordset.MovePrevious End If Case 2 '下一条 If Not Adodc1.Recordset.EOF Then Adodc1.Recordset.MoveNext End If Case 3 '最尾条 If Not Adodc1.Recordset.EOF Then Adodc1.Recordset.MoveLast End If Case 4 '添加 action = ”add“ ManageSale.Show Me.Enabled = False Case 5 '修改 action = ”modify“ id = Adodc1.Recordset.Fields(”id“)ManageSale.Show Me.Enabled = False Case 7 '删除 If MsgBox(”确定删除当前记录,数据将不可恢复?“, vbOKCancel, ”提示“)= vbOK Then Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ rs.Open ”select goodcount from save where goodnum='“ & GoodText(0).Text & ”'“, conn, 1, 3 rs(”goodcount“)= rs(”goodcount“)+ GoodText(5).Text rs.Update rs.Close Adodc1.Recordset.Delete End If End Select End Sub Private Sub Form_Load()Adodc1.ConnectionString = ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ Adodc1.RecordSource = ”select * from sale order by id“ For i = 0 To 6 Set GoodText(i).DataSource = Adodc1 GoodText(i).DataField = Adodc1.Recordset.Fields(i + 1).Name Next Adodc1.Refresh Set DataGrid1.DataSource = Adodc1 End Sub Private Sub Form_Unload(Cancel As Integer)Main.Enabled = True End Sub 添加修改销售记录 Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Public salecount As Long Private Sub Combo1_Change()End Sub Private Sub Cmd_Click(Index As Integer)Select Case Index Case 0 Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ If GoodText(0)= ”“ Or GoodText(3)= ”“ Or GoodText(4)= ”“ Then MsgBox ”数据没有输入完整,请重新输入!“, vbOKOnly, ”提示“ Exit Sub End If If SaleData.action = ”add“ Then rs.Open ”select * from sale“, conn, 1, 3 rs.AddNew Else rs.Open ”select * from sale where id=“ & SaleData.id, conn, 1, 3 End If rs(”Goodnum“)= GNum.Text rs(”goodname“)= GoodText(1).Text rs(”danwei“)= GoodText(2).Text rs(”outdate“)= GoodText(3).Text rs(”danjia“)= GoodText(4).Text rs(”outcount“)= GoodText(0).Text rs(”salename“)= SaleName.Text rs.Update rs.Close rs.Open ”select * from save where goodnum='“ & GNum.Text & ”'“, conn, 1, 3 '在库存表中将库存数量减去已售出的数量 If SaleData.action = ”add“ Then rs(”goodcount“)= rs(”goodcount“)(GoodText(0).Text-salecount)End If rs.Update rs.Close MsgBox ”数据更新成功!“, vbOKOnly, ”提示“ SaleData.Adodc1.Refresh Unload Me Case 1 Unload Me End Select End Sub Private Sub Form_Load()Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ Dim saleman As String If SaleData.action = ”add“ Then rs.Open ”select goodnum from save order by goodnum“, conn, 1, 1 Do While Not rs.EOF GNum.AddItem rs(0)rs.MoveNext Loop GNum.Text = GNum.List(0)Else rs.Open ”select * from sale where id=“ & SaleData.id, conn, 1, 1 GNum.AddItem rs(”goodnum“)GoodText(1).Text = rs(”goodname“)GoodText(2).Text = rs(”danwei“)GoodText(3).Text = rs(”outdate“)GoodText(4).Text = rs(”danjia“)GoodText(0).Text = rs(”outcount“)saleman = rs(”salename“)GNum.Text = GNum.List(0)GNum.Enabled = False rs.Close rs.Open ”select * from save where goodnum='“ & GNum.Text & ”'“, conn, 1, 1 SaleNum.Max = GoodText(0).Text + rs(”goodcount“)salecount = GoodText(0).Text End If rs.Close rs.Open ”select salename from saler order by id“, conn, 1, 1 Do While Not rs.EOF SaleName.AddItem rs(0)rs.MoveNext Loop If SaleData.action = ”add“ Then SaleName.Text = SaleName.List(0)Else SaleName.Text = saleman Cmd(0).Caption = ”保存修改“ End If rs.Close End Sub Private Sub Form_Unload(Cancel As Integer)SaleData.Enabled = True End Sub Private Sub GNum_Click()Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ rs.Open ”select * from save where goodnum='“ & GNum.Text & ”'“, conn, 1, 1 If Not rs.EOF Then GoodText(1).Text = rs(”goodname“)GoodText(2).Text = rs(”danwei“)SaleNum.Max = rs(”goodcount")End If End Sub 1、课程设计的目的、任务 《汇编语言》课程设计对于巩固汇编语言理论知识,加强学生的实际动手能力和提高学生综合素质十分必要。课程设计的目的主要是通过程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。 2、软件需求分析和设计 2.1学生成绩管理系统是对学生成绩的管理,其中包括以下几个模块:(1).插入一个数据(插入学生学号以及语数外三个成绩)。(2)修改一个数据。(3)删除学生成绩数据。(4)查找学生成绩。(5)查看学生成绩的排名(6)查看学生成绩分布(7)按esc键退出系统 2.2学生成绩管理系统应该包含以下信息:学号,语文成绩,英语成绩,数学成绩。因此,系统应该提供以下功能:(1)输出显示菜单。(2)输入学生的成绩(3)修改学生成绩(4)删除学生成绩(5)查询学生成绩(6)显示学生成绩排名(7)显示成绩分布统计(8)按esc键退出系统 2.3依据程序的功能需求,该系统的功能结构图如下 系统功能结构图 2.4 程序流程图: 主程序流程图 查找学生成绩 插入学生学号及成绩 修改学生的成绩 显示各个学科各分数段的人数 3、程序实现说明 3.1学生管理系统中各子程序如下: (1).输入全部学生学号以及语文,英语,数学三科的成绩。子程序名:insert 子程序描述:该子程序为输入字程序。系统在开始的时候是没有数据的,通过该子程序可以初始化系统,将学生的学号及成绩输入系统。 代码: insert proc near;定义进程子程序:插入学生,学号及 成绩 call input;调用input add n,1 ret insert endp (2).修改输入的成绩。子程序名:modify 子程序描述:通过子程序修改学生的成绩 代码: modify proc near;定义进程子程序:修改学生学号,成绩 md1:output mess1;输出mess1 shuru;调用宏shuru:二位数据输入 mov bl,n mov bh,0 mov al,dl mov si,0 md: cmp al,xh[si];先查找输入的学生是否存在 je qq1_1;查到的话,就跳转到qq1_1输入修改的值,也就是重新输入。;结果相等则跳转到qq1_1 add si,1 cmp si,bx jbe md;小于等于则跳转到md output mess;输出mess jmp md1;不相等继续输入学号 qq1_1:;转入修改的值重新输入。mov di,si output mess2 output mess4 mov si,0 mov cx,3 qq3_1:shuruu;cmp dx,78h; jbe qq2_1;output ts3;jmp qq1_1;qq2_1:mov buf[si],dl output bg;add si,1 loop qq3_1 mov al,buf[0];mov chi[di],al mov al,buf[1] 分别输入语文,英语,数学成绩,并将其放 在缓冲区buf中 比较输入的成绩是否大于120,如果大于120的 话,那么重 新输入成绩 小于等于则转移到qq2_1 输出ts3 跳转到qq1_1 输出空格 将存入buf中的成绩,分别赋值给存放对应科 目的成绩的数组 mov eng[di],al mov al,buf[2] mov mat[di],al ret modify endp (3).删除学生的成绩。子程序名:delete 子程序描述:通过子程序删除学生的成绩 代码: de proc near;删除某个学生的记录 sc1:output mess1 shuru;调用宏shuru,接受输入的学号 mov bl,n mov bh,0 mov al,dl mov si,0 sc: cmp al,xh[si];查询输入学号的学生信息是否存在,不存在的话,重新输入学号 je sc2;相等则转移到sc2 add si,1 cmp si,bx jbe sc;小于等于则转移到sc output mess;输出mess jmp sc1 sc2: sub bx,si cmp bx,0 je sc3;相等则转移到sc3 mov cx,bx sc4:mov dl,chi[si+1] mov chi[si],dl mov dl,eng[si+1] mov eng[si],dl mov dl,mat[si+1] mov mat[si],dl mov dl,xh[si+1] mov xh[si],dl add si,1 loop sc4;loop循环指令,执行操作(cx)<--(cx)-1.若 cx!=0,跳转到标号sc处循环执行;cx=0,则推出 循环,执行loop的下一条指令 sub n,1 sc3: ret de endp (3).查询学生的成绩。子程序名:find 子程序描述:通过子程序查询学生的成绩 代码: find proc near;定义进程子程序:查找学生成绩 call sum;求学生的总成绩 call ping;求学生的平均成绩 bj1:output mess1;输出mess1 shuru;二位数数据输入 mov bl,n mov bh,0 mov al,dl mov si,0 bj: cmp al,xh[si];将输入的学号与输入的学号相比,je i;存在的话,将此学生的成绩输出。je表示结果相 等则转移。add si,1 cmp si,bx jbe bj;output mess jmp bj1 i: output strr2 shuzi xh[si];shuzi output bg;mov al,chi[si] cbw;shuzii ax;shuzii output bg;mov al,eng[si] cbw;shuzii ax;shuzii output bg mov al,mat[si] cbw shuzii ax output bg; mov al,pj[si] cbw 小于等于则转移到bj 为二位数据输出 输出空格 将字节变为字 为三位数据输出。输出空格 将字节变为字 为三位数据输出 输出空格的字符串,用于与标题栏对齐 shuzii ax output bg mov ax,si mov bl,2 mul bl mov bx,ax shuzii zc[bx];shuzii为三位数据输出 output bg;输出空格的字符串,用于与标题栏对齐 shuzi mc[si];shuzi为二位数据输出 ret find endp (4).显示学生的成绩排名。子程序名:show 子程序描述:通过子程序显示学生的成绩排名 代码: show proc near;定义进程子程序:显示结果排名 call sum;调用宏sum call ping;调用宏ping call rank;调用宏rank call shuchu;调用宏shuchu ret show endp 3.2程序运行抓图: 主菜单 修改学生成绩 删除学生成绩 显示各个学科各分数段的人数 4、程序总结 通过两个星期的学习,努力,终于完成了报告。系统可以很好的运行。这两个多星期的时间,几乎每天不是在敲代码,就是在看代码,查书,上网。系统中用到了很多最近才学习的知识,比如宏,子程序。这些都使得代码的运行效率提高了,代码行数减少了。系统还用到了bios的清屏功能。这些功能如果不是做课程设计,我想我很难会接触到这些知识。 由于自己对知识掌握的不是很牢固,其中也会碰到一些困难。每当遇到问题的时候,我会先上网去查找,看看有没有人提过这方面的问题。互联网是强大的,大部分的问题通过网络都可以解决。部分找不到的问题,我就去请教班里学得好的同学。他们对知识的掌握远超过我。这样下来,很多问题都迎刃而解了。 课程设计是一个很好的掌握书本上知识的过程。平时上课之后,自己都不会想着去敲一些代码联系联系。通过做课程设计,将理论与实践结合了起来,对知识的理解更加深入了。 C语言课程设计 仓库管理系统 #include struct cangku { int num; char name[20]; char introdution[50]; float square; };typedef struct cangku Cangku; int Input(Cangku t[]);void List(Cangku t[],int n);void SearchOnName(Cangku t[],int n);int DeleteRecord(Cangku t[],int n);int AlterRecord(Cangku t[],int n);int AddRecord(Cangku t[],int n);void SortOnName(Cangku t[],int n);void SortOnSquare(Cangku t[],int n);void SaveRecord(Cangku t[],int n);int LoadRecord(Cangku t[]);int LoadRecord1(Cangku t[]);void Save(Cangku t[],int n);void Load(Cangku t[],int n);void Load1(Cangku t[]);int Menu_select(); void main(){ Cangku ck[50];int i,l,length,w=1;int q[4]={5,2,1,0}; system(“cls”);printf(“请输入第1个密码:n”);for(i=0;i<4;i++) { scanf(“%d”,&l); system(“cls”); if(l==q[i]) printf(“正确,继续输入第%d个密码:.n”,i+2); else { w=0; printf(“输入错误!n”); break; } } while(w) { switch(Menu_select()) { case 1: length=Input(ck); SaveRecord(ck,length); break; case 2: length=LoadRecord(ck); SearchOnName(ck,length); break; case 3: length=LoadRecord(ck); length=DeleteRecord(ck,length); SaveRecord(ck,length); break; case 4: length=LoadRecord(ck); length=AlterRecord(ck,length); SaveRecord(ck,length); break; case 5: length=LoadRecord(ck); length=AddRecord(ck,length); SaveRecord(ck,length); break; case 6: length=LoadRecord(ck); system(“cls”); List(ck,length); break; case 7: length=LoadRecord(ck); system(“cls”); SortOnName(ck,length); SaveRecord(ck,length); break; case 8: length=LoadRecord(ck); system(“cls”); SortOnSquare(ck,length); SaveRecord(ck,length); break; case 9: length=LoadRecord(ck); system(“cls”); Save(ck,length); break; case 0: length=LoadRecord1(ck); Load1(ck); system(“cls”); Load(ck,length); break; case 10: exit(0); } } } int Menu_select(){ int c; printf(“按任意键进入仓库管理菜单n”); getchar(); system(“cls”); system(“color F0”);printf(“ ******************************仓库管理*******************************n”); printf(“ * 1.录入仓库初始记录 *n”); printf(“ * 2.按仓库名称查找记录 *n”); printf(“ * 3.删除仓库记录 *n”); printf(“ * 4.修改仓库记录 *n”);printf(“ * 5.增加仓库信息 *n”); printf(“ * 6.显示全部记录 *n”); printf(“ * 7.按仓库名称排序 *n”); printf(“ * 8.按仓库面积排序 *n”); printf(“ * 9.备份 *n”);printf(“ * 0.恢复 *n”);printf(“ * 10.退出 *n”); printf(“ *********************************************************************n”);do { printf(“n输入您想要进行的操作选项键(0-10):”); if(scanf(“%d”,&c)!=1) { while(getchar()!='n') continue; } } while(c<0||c>10);return c;} int Input(Cangku t[]){ int i,n; system(“cls”); printf(“n请输入要输入的仓库数目:n”); scanf(“%d”,&n); printf(“开始输入仓库信息:n”); for(i=0;i { system(“cls”); printf(“n第%d个仓库的编号:”,i+1); scanf(“%d”,&t[i].num); printf(“第%d个仓库的名称:”,i+1); scanf(“%s”,t[i].name); printf(“第%d个仓库的面积:”,i+1); scanf(“%f”,&t[i].square); printf(“第%d个仓库的说明:”,i+1); scanf(“%s”,t[i].introdution);} return(n);} void List(Cangku t[],int n){ int i; printf(“ *********************************************************************n”); printf(“ ** 编号 名称 面积 说明n”); printf(“ -------n”);for(i=0;i printf(“%17d%13s%20f%14sn”,t[i].num,t[i].name,t[i].square,t[i].introdution);} printf(“ *********************************************************************n”); printf(“n”);getchar();} void SearchOnName(Cangku t[],int n){ char s[20]; int i,flag=0; system(“cls”); printf(“请输入要查找的仓库名称:n”); scanf(“%s”,s); for(i=0;i { if(strcmp(s,t[i].name)==0) { flag=1; system(“cls”); printf(“nn要查找的仓库信息如下:n”); printf(“n”); printf(“ *********************************************************************n”); printf(“ ** 编号 名称 面积 说明n”); printf(“ -------n”);{ printf(“%17d%13s%20f%14sn”,t[i].num,t[i].name,t[i].square,t[i].introdution);} printf(“ *********************************************************************n”); printf(“n”); } } if(flag==0) printf(“要查找的仓库不存在!n”);getchar();} int DeleteRecord(Cangku t[],int n){ char s[20]; char ch; int i,j,flag=0; system(“cls”); printf(“请输入要删除的仓库名称n”); scanf(“%s”,s); for(i=0;i if(strcmp(s,t[i].name)==0) { flag=1; system(“cls”); printf(“nn要删除的仓库信息如下:n”); printf(“n”); printf(“ *********************************************************************n”); printf(“ ** 编号 名称 面积 说明n”); printf(“ -------n”);{ printf(“%17d%13s%20f%14sn”,t[i].num,t[i].name,t[i].square,t[i].introdution);} printf(“ *********************************************************************n”); printf(“n”); printf(“确定删除仓库信息吗?(Y/N)n”); ch=getchar(); ch=getchar(); if(ch=='Y'||ch=='y') { for(j=i;j t[j]=t[j+1]; n--; i--; printf(“删除成功.n”); } } } if(flag==0) printf(“要删除的仓库不存在!n”); getchar(); return n;} int AlterRecord(Cangku t[],int n){ int i,flag=0; char s[20],ch; system(“cls”); printf(“请输入要修改的仓库名称n”); scanf(“%s”,s); for(i=0;i { if(strcmp(s,t[i].name)==0) { flag=1; system(“cls”); printf(“nn要修改的仓库信息如下:n”); printf(“n”); printf(“ *********************************************************************n”); printf(“ ** 编号 名称 面积 说明n”); printf(“ -------n”); { printf(“%17d%13s%20f%14sn”,t[i].num,t[i].name,t[i].square,t[i].introdution); } printf(“ *********************************************************************n”); printf(“n”); printf(“确定修改仓库信息吗?(Y/N)n”); ch=getchar(); ch=getchar(); if(ch=='y'||ch=='Y') { system(“cls”); printf(“请输入修改后的信息:n”); printf(“请输入仓库新的名称:”); scanf(“%s”,t[i].name); printf(“请输入%s仓库新的编号:”,t[i].name); scanf(“%d”,&t[i].num); printf(“请输入%s仓库新的面积:”,t[i].name); scanf(“%f”,&t[i].square); printf(“请输入%s仓库新的说明:”,t[i].name); scanf(“%s”,t[i].introdution); } } } if(flag==0) printf(“要修改的仓库不存在!n”); getchar(); return n;} int AddRecord(Cangku t[],int n){ int i,m; system(“cls”); printf(“n请输入再增加的记录数:n”); scanf(“%d”,&m); printf(“开始追加记录n”); for(i=n;i { system(“cls”); printf(“n第%d个仓库的编号:”,i+1); scanf(“%d”,&t[i].num); printf(“第%d个仓库的名称:”,i+1); scanf(“%s”,t[i].name); printf(“第%d个仓库的面积:”,i+1); scanf(“%f”,&t[i].square); printf(“第%d个仓库的说明:”,i+1); scanf(“%s”,t[i].introdution); } return(n+m);} void SortOnName(Cangku t[],int n){ int i,j; struct cangku temp; for(j=1;j for(i=0;i if((strcmp(t[i].name,t[i+1].name))>0) { temp=t[i]; t[i]=t[i+1]; t[i+1]=temp; } printf(“排序成功!!n”); printf(“排序后仓库信息列表如下:n”); List(t,n);} void SortOnSquare(Cangku t[],int n){ int i,j; struct cangku temp; for(j=1;j for(i=0;i if(t[i].square { temp=t[i]; t[i]=t[i+1]; t[i+1]=temp; } printf(“排序成功!!n”); printf(“排序后仓库信息列表如下:n”); List(t,n);} void SaveRecord(Cangku t[],int n){ int i; FILE *fp; if((fp=fopen(“record.txt”,“w”))==NULL) { printf(“不能打开文件!n”); exit(1);} for(i=0;i { fwrite(&t[i],sizeof(struct cangku),1,fp); } fclose(fp);} int LoadRecord(Cangku t[]){ int n=0; FILE *fp; if((fp=fopen(“record.txt”,“a+”))==NULL) { printf(“不能打开文件!n”); exit(1);} while(fread(&t[n],sizeof(struct cangku),1,fp))n++; fclose(fp); printf(“从文件中成功读出记录!!n”); return n;} int LoadRecord1(Cangku t[]){ int n=0; FILE *fp; if((fp=fopen(“bkrecord.txt”,“a+”))==NULL) { printf(“不能打开文件!n”); exit(1);} while(fread(&t[n],sizeof(struct cangku),1,fp))n++; fclose(fp); printf(“从文件中成功读出记录!!n”); return n;} void Save(Cangku t[],int n){ int i; FILE *fp; if((fp=fopen(“bkrecord.txt”,“w”))==NULL) { printf(“不能打开文件!n”); exit(1);} for(i=0;i { fwrite(&t[i],sizeof(struct cangku),1,fp); } fclose(fp); printf(“备份成功.n”); getchar();} void Load1(Cangku t[]){ int n=0; FILE *fp; if((fp=fopen(“bkrecord.txt”,“a+”))==NULL) { printf(“不能打开文件!n”); exit(1); } while (fread(&t[n],sizeof(struct cangku),1,fp))n++; fclose(fp); getchar();} void Load(Cangku t[],int n){ int i; FILE *fp; if((fp=fopen(“record.txt”,“w”))==NULL) { printf(“不能打开文件!n”); exit(1);} for(i=0;i { fwrite(&t[i],sizeof(struct cangku),1,fp); } fclose(fp); printf(“恢复成功.n”);}1 课程设计说明书 学 院、系: 专 业: 学 生 姓 名: 设 计 题 目: 起 迄 日 期: 指 导 教 师: 学 号: 销售管理系统 日期: 2017年5月12日 设计目的 1.了解管理信息系统的开发流程,熟悉C语言的文件和结构数组的各种基本操作。2.握高级程序设计语言的知识。 3.践中逐步掌握程序设计的思想和方法,培养问题求解和语言的应用能力。 4.程序中涉及结构体、数组、文件等方面的知识。通过本程序的训练,能对C语言 的文件操作有一个更深刻的了解。 5.提高与程序设计和软件开发有关的各种综合能力。 6.通过本课程设计,培养上机动手能力,巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手能力,闯过编程关; 7.为后续各门计算机课程的学习打下坚实基础;8.学会用c语言程序设计来设计销售管理系统设计。任务概述 某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:1)销售员的代号,2)产品的代号,3)这种产品的当天的销售额。每位销售员每天上缴1张便条。 试设计一个便条管理系统,使之能提供以下功能: 1、系统以菜单方式工作 2、便条信息录入功能(便条信息用文件保存)--输入 3、收集到了上个月的所有便条后,读取销售情况 1)计算每个人每种产品的销售额。 2)按销售额对销售员进行排序,输出排序结果(销售员代号) 3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果 4)输出统计报表 模块划分 主菜单及头文件设计 编辑系统菜单运行 输入信息 保存信息,参数为结构体数组和记录数 读入取函数,参数为结构体数组 清单输出 主要功能的实现 主要函数说明及其N-S图 主菜单及头文件设计: 我们按照老师所给的示例我们首先编译了一个头文件,在头文件里,编译了主函数需要用到的一些函数,如#include “stdio.h”等,因为需要录入便条的所有信息,所有用一个数据结构来实现信息的储存方式,用数组方式,把每条信息都编译成一个数组,如销售员代号用name[4]记录。头文件还包括了定义常数记录数typedef struct,主函数原型 int menu_select();/*声明函数*/ int enter(RECODE t[]);/*声明函数*/ void salor(RECODE t[],int n);/*声明函数*/ int sum(RECODE t[],int n,int m);/*声明函数*/ void list1(RECODE t[],int n);/*声明函数*/ void list2(RECODE t[],int n);/*声明函数*/ void list3(RECODE t[],int n);/*声明函数*/ void save(RECODE t[],int n);/*声明函数*/ int load(RECODE t[]);/*声明函数*/ 这些的都是主函数需要用到的数据,因此放入头文件当中,在主程序开始之前直接引用#include “pro.h”。 2.编辑系统菜单运行: 题目要求我们系统以菜单方式工作,所以我们现要定义一个系统的结构体数组RECODE rec[600],用for(;;)循环让菜单实现无限循环,让switch(menu_select())调用主菜单函数,返回值整数作开关语句的条件,之后分别定义菜单的信息,如: case 1: length=enter(rec);就是输入信息的定义编辑,当然最后需要用到break来实现返回。菜单定义完成之后,开始编译菜单的输出,这部分,用了printf就把需要显示的菜单显示出来,然后由用户选择菜单的选项,因为菜单只有0~7的选项,为了防止用户输入选项超值,所以用do while语句来控制,(c<0||c>7) 限定了用户输入的数据只有0~7才有效,超值则返回开始菜单,重新选择(return)。 3.输入信息: 输入信息一般都是使用scanf来实现,但在用户输入之前需要解决一个问题,程序必须限制用户的输入序数(记录条数),所以在输入数据之前,必须先限定序数,方法则是用一个for循环来实现,有用户输入一个数字,成为循环的上限,而用户输入的便条信息则在此限定下,不能超出,当超出时则返回到开始菜单。用户输入的便条信息分别存入对应的数组当中,如便条条数则存入t[i].num当中。 4.保存信息,参数为结构体数组和记录数: 用户输入的信息需要保存时,用save选项进行保存。保存的时候,实现应该建立一个指向文件的指针,从而固定保存文件时的位置,之后用if语句来判断打开文件是否正常,if((fp=fopen(“record.txt”,“wb”))==NULL),如果没打开(打开不正常),则程序执行退出;当判断文件打开正常时,系统显示“保存文件”(用printf(“n保存文件n”)来完成),保存信息是用到的fprintf函数,将制定记录数输入文件fprintf(fp,“%d”,n),因为源文件中采用了换行,保存文件是系统默认不会进行保存,所有必须加如换行符号保存,防止文件丢失,保证文件以用户输入的信息一致,保存换行符号依然采用fprintf函数来实现,具体源文件为fprintf(fp,“rn”);当确立了保存的可以性之后,系统开始录入需要保存的信息,用for循环语句,不断把用户输入的信息保存,因为之前在编写输入,输出程序时,都用到了一定的格式,保证信息的一一对应,所以在保存文件时,也需要确定和输入是相同的格式,这里依然使用fprintf函数来进行保存,如fprintf(fp,“%-10d%-7d%-7d%-7d%-7d-7d”,t[i].name,t[i].a1,t[i].a2,t[i].a3,t[i].a4,t[i].a5)就是把销售员代号,产品代号,销售额按照间隔7个字符格式进行保存,在保存格式确立后,需要把换行符号再次写入文件,程序结束后fclose结束保存,并用printf输出“文件保存成功”,让用户知道已经保存文件。 5.读入取函数,参数为结构体数组: 前面已经做了文件的保存,当保存文件成功后,系统会以record.txt文件保存在与程序同级的文件夹下,而读入函数,就是为了让用户再次打开运行程序时,可以直接读取之前已经输入并保存过的信息,和储存信息一样,读入函数也采用了参数为结构体数组,同样应该确定文件指向指针FILE *fp,读入函数之前,应该确定是否有已经保存的文件,用保存文件一样,用if语句来进行判断 if((fp=fopen(“record.txt”,“rb”))==NULL),如果判断失败,系统不能读入文件,则会显示“不能打开文件”,用printf(“不能打开文件n”)来实现,同时系统要结束读入文件的执行,用exit(1)实现;如果判断成功,则系统会自动读入用户已经保存的数据(fscanf(fp,“%d”,&n)读入记录数),用for循环把已经保存的数据一一对应的读入到正在执行的程序中,这里需要注意的是,读取的数据格式应该同保 存 时的一 致,如 储 存 时的格 式 是fprintf(fp,“%-10d%-7d%-7d%-7d%-7d-7d”,t[i].name,t[i].a1,t[i].a2,t[i].a3,t[i].a4,t[i].a5),则读 入的时的格 式 就 为fscanf(fp,“%d%d%d%d%d%d”,&(t[i].name),&(t[i].a1),&(t[i].a2),&(t[i].a3),&(t[i].a4),&(t[i].a5)),读取成功后关闭文件fclose(fp),并显示“成功地从文件读入数据!!”(用printf实现)。 6.清单输出: 读取销售情况有3个,分别是每个人每种产品的销售额,按销售额对销售员进行排序和每种产品的总销售额三个函数: 1).每个人每种产品的销售额: 首先,要定义每个人,每种产品,销售额数组如 int i,j,sum0=0,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;int c[4],b1[4]={0},b2[4]={0},b3[4]={0},b4[4]={0},b5[4]={0},用for循环来求每个人的总销售额:for(i=0;i<4;i++);用for循环来求每个人每种产品的总销售额:for(i=0;i 此部分要分两部分其一是,每位销售员销售额;其二是,按销售额对销售员排序。在求每个销售员销售额时也是要先定义销售员代号,产品代号,销售额。接着是则是用输入要查询的销售员的代号,用scanf(“%d”,&s)来记录输入销售员代号的信息,然后输出头标(如销售员代号,产品代号,销售额等,用printf实现),之后开始查询,查询信息首先需要一个for语句来,实现对已存入数据的所有查询for(i=0;i 也一样首先要定义数组,接着用c[i]=sum(t,n,i+1)求每个人的总销售额,再用for循环,再用 sum0+=c[i]对所有产品的销售额求总,用for循环对每个人每种产品的销售额求总销售额,再用for循环实现每种产品的总销售额,然后输出 头标(如销售员代号,产品代号,总销售额等,用printf实现)即可。程序运行数据及其结果 1.进入主菜单: 2.选择“1”,输入便条: 3.输入条数,如:输入2天的便条,8条: 4.选择“2”,保存到文件: 5.选择“3”,读取文件: 6.选择“4”,显示清单: 7.选择“5”,每位销售员的销售额: 8.输入查询员工代号,如:查询的员工号为3: 8.选择“6”,每种产品的销售额: 9.选择“7”,按销售额对销售员排序: 10.选择“0”,退出管理: 11.保存的文件: 保存的文件为TXT格式,其保存的文件为: 课程设计心得 经过上机实践学习,使我对c语言有了更进一步的认识和了解,C语言是计算机程序设计的重要理论基础,在我们以后的学习和工作中都有着十分重要的地位。要学好这种语言,仅仅学习课本上的知识是不够的,还要经常自己动手,有较强的实践能力。只有多动手,经常编写程序,才能发现我们学习上的漏洞和自己的不足,并在实践中解决这些问题,不断提高自己转化知识的能力。通过实践,我也发现 我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习c语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。 附录: #include “stdio.h”/*输入输出函数*/ #include “stdlib.h”/*通用应用程序函数*/ #include “string.h”/*字符串函数*/ #include “ctype.h”/*字符操作函数*/ typedef struct /*定义结构体变量*/ { int name;/*销售员代号*/ int a1;/*产品一代号*/ int a2;/*产品二代号*/ int a3;/*产品三代号*/ int a4;/*产品四代号*/ int a5;/*产品五代号*/ }RECODE; /******以下是函数原型*******/ int menu_select();/*声明函数*/ int enter(RECODE t[]);/*声明函数*/ void salor(RECODE t[],int n);/*声明函数*/ int sum(RECODE t[],int n,int m);/*声明函数*/ void list1(RECODE t[],int n);/*声明函数*/ void list2(RECODE t[],int n);/*声明函数*/ void list3(RECODE t[],int n);/*声明函数*/ void save(RECODE t[],int n);/*声明函数*/ int load(RECODE t[]);/*声明函数*/ /*主函数开始*/ int main()/*主函数*/ { } RECODE rec[600];int length; system(“cls”);/*清屏*/ for(;;)/*无限循环*/ {switch(menu_select())/*根据用户的选择判断该调用哪个功能函数*/ { break;case 2:save(rec,length); } } break;break;break;break;break;break;case 3:length=load(rec);case 4:list1(rec,length);case 5:salor(rec,length);case 6:list2(rec,length);case 7:list3(rec,length);case 0:exit(0); case 1:length=enter(rec);int menu_select()/*菜单函数*/ { int n; printf(“********************MENU*****************nn”);printf(“ 1 输入便条n”);printf(“ 2 保存到文件n”);printf(“ 3 读取文件n”);printf(“ 4 显示便条清单n”); printf(“ 5 每位销售员的销售额n”);printf(“ 6 每种产品的销售额n”);printf(“ 7 按销售额对销售员排序n”);printf(“ 0 退出管理n”); printf(“*********************END****************nn”);printf(“ 请选择你的操作(0-7): n”);scanf(“%d”,&n);if(0 /*清单输入*/ int enter(RECODE t[]){ int i,num;system(“cls”);/*清屏*/ printf(“请输入要写的便条条数:n”); scanf(“%d”,&num);/*输入所要写入的清单的条数*/ printf(“name product1 product2 product3 product4 product5”);for(i=0;i } printf(“n----nnn”);return i;} /*保存文件*/ void save(RECODE t[],int n){ printf(“nn-----n”); scanf(“%d%d%d%d%d%d”,&t[i].name,&t[i].a1,&t[i].a2,&t[i].a3,&t[i].a4,&t[i].a5); int i; FILE *fp;/*调用fopen函数*/ if((fp=fopen(“record.txt”,“wb”))==NULL)/*如果函数带回一个空指针值*/ { printf(“不能打开文件n”);/*不能打开文件*/ exit(1);} fprintf(fp,“%d”,n);fprintf(fp,“rn”);for(i=0;i fprintf(fp,“%-10d%-7d%-7d%-7d%-7d%-7d”,t[i].name,t[i].a1,t[i].a2,t[i].a3,t[i].a4,t[i].a5);/*将便条的信息输出到fp指向的文件上*/ fprintf(fp,“rn”);} fclose(fp);/*关闭文件*/ printf(“****保存成功***nn”);/*显示保存成功*/ printf(“press any key to continue......n”);getchar();} /*读取文件*/ int load(RECODE t[]){ int i,n;FILE *fp; if((fp=fopen(“record.txt”,“r”))==NULL)/*如果函数带回一个空指针值*/ { printf(“不能打开文件n”);/*不能打开文件*/ exit(1);} fscanf(fp,“%d”,&n); for(i=0;i fscanf(fp,“%d%d%d%d%d%d”,&(t[i].name),&(t[i].a1),&(t[i].a2), &(t[i].a3),&(t[i].a4),&(t[i].a5));/*从fp指向的文件上读入便条信息*/ fclose(fp); printf(“n 成功读取文件!!n”);/*成功读入信息*/ printf(“press any key to continue......nn”);getchar();return n;} /*显示清单*/ void list1(RECODE t[],int n){ int i;FILE *fp; if((fp=fopen(“record.txt”,“r”))==NULL)/*如果函数带回一个空指针值*/ { printf(“不能打开文件n”);/*不能打开文件*/ exit(1);} fscanf(fp,“%d”,&n);for(i=0;i fscanf(fp,“%d%d%d%d%d%d”,&(t[i].name),&(t[i].a1),&(t[i].a2),&(t[i].a3),&(t[i].a4),&(t[i].a5));/*从fp指向的文件上读入便条信息*/ fclose(fp); printf(“***************************the recode**************************nnn”); printf(“name product1 product2 product3 product4 product5”);for(i=0;i printf(“ %d %d %d %d %d %d”,t[i].name,lise of saling t[i].a1,t[i].a2,t[i].a3,t[i].a4,t[i].a5); } printf(“nn--n”);printf(“n press any key to continue.......n”);getchar();} /*每位销售员销售额*/ void salor(RECODE t[],int n){ int i,s; int b1=0,b2=0,b3=0,b4=0,b5=0; printf(“请输入要查询的销售员的代号(1-4): n”); scanf(“%d”,&s);/*输入所要查看的售货员的代号*/ for(i=0;i if(t[i].name==s){b1+=t[i].a1; b2+=t[i].a2; b3+=t[i].a3; b4+=t[i].a4; b5+=t[i].a5;} printf(“name product1 product2 product3 product4 product5n”); printf(“------------n”); printf(“%-15d%-10d%-10d%-7d%-7d%-7d”,s,b1,b2,b3,b4,b5); printf(“npress enter to continue.......n”); getchar(); } /*销售产品总和*/ int sum(RECODE t[],int n, int e){ int i,sum=0; for(i=0;i<=n;i++)/*求销售产品的总和*/ if(e==t[i].name) {sum+=t[i].a1;sum+=t[i].a2;sum+=t[i].a3;sum+=t[i].a4;sum+=t[i].a5;} return sum;} /*每种产品的销售额*/ void list2(RECODE t[],int n){ int i,j,sum0=0,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;int c[4],b1[4]={0},b2[4]={0},b3[4]={0},b4[4]={0},b5[4]={0};system(“cls”);;for(i=0;i<4;i++) c[i]=sum(t,n,i+1);/*求每个人的总销售额*/ for(i=0;i<4;i++) sum0+=c[i];/*所有产品的销售额*/ for(i=0;i for(i=0;i<4;i++)/*每种产品的总销售额*/ {sum1+=b1[i];sum2+=b2[i]; sum3+=b3[i];sum4+=b4[i];sum5+=b5[i];} printf(“ products numn”); printf(“ code sumnn”);for(i=0;i<4;i++) printf(“ %-10d%-7d%-7d%-7d%-7d%-7d%-7dn”,i+1,b1[i],b2[i],b3[i],b4[i],b5[i],c[i]);printf(“ psum %-7d%-7d%-7d%-7d%-7d%-7d”,sum1,sum2,sum3,sum4,sum5,sum0);printf(“n press any key to continue.......n”);getchar();} /*按销售额对销售员排序*/ void list3(RECODE t[],int n){ int i,j,s; int c[4],m[4];/*定义两个数组*/ system(“cls”);/*清屏*/ for(i=0;i<4;i++)m[i]=i+1;for(i=0;i<4;i++)c[i]=sum(t,n,m[i]); for(i=0;i<4;i++)/*按销售员的销售额进行排序*/ for(j=i+1;j<4;j++)if(c[i] } printf(“the sequce of salor'saling number from many to fewn”);for(i=0;i<4;i++)/*输出销售员代号*/ printf(“%dn”,m[i]); printf(“ninput any key to continue.......n”);getchar();}第二篇:软件工程 课程设计 销售管理系统
第三篇:语言课程设计-学生成绩管理系统
第四篇:C语言课程设计 仓库管理系统
第五篇:c语言销售管理系统