西电c语言课程设计报告.docx
《西电c语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《西电c语言课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。
西电c语言课程设计报告
西安电子科技大学
程序设计基础课程设计报告
所在分组13组
学生姓名黄辉、肖峰
许云松、平措朗杰
学生班级1518021
任课教师王勇
报告日期2016.6.8
目录
目录2
1.课程设计题目2
2.程序设计思路2
3.功能模块图2
4.数据结构设计2
5.算法设计2
6.程序代码2
7.程序运行结果2
8.编程中遇到的困难及解决方法2
9.总结心得及建议2
10.组内成员分工和贡献评价2
1.课程设计题目
文件加密解密软件设计(对称)
2.程序设计思路
1了解问题。
先了解整体软件运行流程,将所有功能分块,比如:
菜单设计、加密解密主程序、密码修改功能、最终调试。
2初步设计
将每个分块下发给组员,组员进行粗略的程序编译,再根据各分块难度不同增减任务量。
3编写代码
组员将各自代码编译完成,并确保独立运行成功。
4程序整合、调试
将各分块整合,编译运行,尝试输入多组数据,测试结果是否与预期相同。
如果不同,那么查找问题并修改代码。
最终形成合格的程序。
3.功能模块图
3.数据结构设计
没开数据结构课不会写。
。
。
。
现学现写也来不及了〒_〒
4.算法设计
同4。
。
。
6.程序代码
#include
#include
#include
#include//清屏函数的头文件
voidf1(void);//主界面函数
voidrode(int);//返回菜单函数
intsystem(constchar*string);//清屏函数声明
voidf2(void);//声明f2
voidf3(void);
voidf4(void);//开始时得解开密码函数
intmima=123456,n;//全局变量
voidmain()
{
inta,i,b;
a=mima;
b=3;
printf("此程序设置了初始密码!
请输入6位数字密码:
\n");
for(i=0;i<3;i++)//三次输入密码机会
{
scanf("%d",&n);
if(a==n)//密码输入正确
{
printf("进入\n");
system("cls");//清屏函数
f1();//调用f1函数
}
else//密码输入错误
{
if(b-1==0)
exit(0);//退出
printf("密码好像不太对哦,就剩下%d次机会了!
\n",b-1);
b=b-1;
}
}
}
voidf1()//主界面函数
{
chars;//定义S,即操作选项
printf("******************************文本加密软件**************************\n");
printf("*************************************************\n");
printf("**作者**\n");
printf("**肖峰**\n");
printf("**许云松**\n");
printf("**黄辉**\n");
printf("**平措朗杰**\n");
printf("*************************************************\n");
printf("*请从下面的菜单中选择你要进行的操作*\n");
printf("*a.文件加密*\n");
printf("*b.文件解密*\n");
printf("*c.更改密码*\n");
printf("*z.退出系统*\n");
printf("******************************文本加密软件**************************\n");
s=getche();
if(s=='a')
{
system("cls");//清屏
f2();//调用函数f2
}
if(s=='b')
{
system("cls");//清屏
f3();//调用函数f3
}
if(s=='c')
{
system("cls");//清屏
f4();//调用函数f4
}
if(s=='z')
exit(0);//退出系统
}
voidrode(intk)//返回菜单函数
{
charc;//定义c,即操作选项
printf("接下来你希望干什么啊\n");
printf("a.继续当前菜单\nb.回到主菜单\n");
c=getch();
if(c=='b')
{
system("cls");//清屏
f1();//调用f1函数
}
if(c=='a')
{
if(k==2)
f2();
if(k==3)
f3();
if(k==4)
f4();
}
}
voidf2()
{
FILE*fp1,*fp2;
charf1[20],f2[20],p[6];
registercharch;
inti=0,j;
printf("输入加密文件:
");
scanf("%s",f1);
if((fp1=fopen(f1,"r"))==NULL)
{
printf("\n文件无法打开!
请返回");
rode
(2);
}
else
{
printf("\n输入密钥:
");
scanf("%s",p);
j=strlen(p);
printf("\n输入加密后的文件:
");
scanf("%s",f2);
if((fp2=fopen(f2,"w"))==NULL)
{
printf("\n文件无法打开!
");
rode
(2);
}
else
{
while(j>=0)
{
ch=fgetc(fp1);
while(!
feof(fp1))
{
fputc(ch^p[i>=j?
i=0:
i++],fp2);
ch=fgetc(fp1);
}
j--;
}
printf("加密成功!
\n");
fclose(fp1);
fclose(fp2);
rode
(2);
}
}
}
voidf3()
{
FILE*fp1,*fp2;
charf1[20],f2[20],p[6];
registercharch;
inti=0,j;
printf("输入解密文件:
");
scanf("%s",f1);
if((fp1=fopen(f1,"r"))==NULL)
{
printf("\n文件无法打开!
请返回");
rode(3);
}
else
{
printf("\n输入密钥:
");
scanf("%s",p);
j=strlen(p);
printf("\n输入解密后的文件:
");
scanf("%s",f2);
if((fp2=fopen(f2,"w"))==NULL)
{
printf("\n文件无法打开!
");
rode(3);
}
else
{
while(j>=0)
{
ch=fgetc(fp1);
while(!
feof(fp1))
{
fputc(ch^p[i>=j?
i=0:
i++],fp2);
ch=fgetc(fp1);
}
j--;
}
printf("解密成功!
\n");
fclose(fp1);
fclose(fp2);
rode(3);
}
}
}
voidf4()
{
intpas,ch,h=3,t,j;
printf("重置密码前必须验证原密码。
请输入6位数字原密码:
");
for(j=0;j<3;j++)//三次输入密码机会
{
scanf("%d",&t);
if(mima==t)//密码输入正确
{
while
(1)
{
while
(1)
{
printf("请输入新密码:
");
scanf("%d",&pas);
if(pas>99999&&pas<1000000)//密码为六位数
break;
else//密码非六位数
{
printf("输入格式不正确,请输入六位数字\n");
continue;
}
}
printf("请再次输入新密码:
");
scanf("%d",&ch);
if(pas==ch)//两次新密码输入一致
break;//跳出循环
else//两次新密码输入不一致
{
printf("两次新密码输入不一致\n");
continue;
}
}
printf("恭喜你,密码修改成功\n");
mima=pas;//修改全局变量密码
rode(4);//调用rode函数
}
else//密码输入错误
{
if(h-1==0)
exit(0);//退出
printf("抱歉,密码错误,您还有%d次机会:
",h-1);
h=h-1;
}
}
}
7.程序运行结果
挺成功的,完全符合标准
8.编程中遇到的困难及解决方法
按时间顺序来说吧。
1思考不周全,比如忘记必须是六位密码,忘记设置变量等。
2整合的困难,因为组员各自负责自己的分块,单独运行成功,但放到整个函数中会碰到变量形式、名称不统一,没有考虑与主函数的衔接等,方法就是一点点改…
3细节不注意,导致修改特别困难,比如字符输入选择了getchar而不是gerche,因为对getchar理解不够,直到昨天晚上才找到了问题。
还有套用函数调用时,没有将调用语句放到整个函数最后,导致运行调用函数后,这个函数后边的语句也运行了,诸如此类,数不胜数。
9.总结心得及建议
通过这个简单的程序,我们认识到了自己所学浅薄,基础很差,加上没有经验,搞得一团糟,从这个程序身上,我们体会到了细心的重要,体会到了修改程序的枯燥,走出了编程的第一步。
建议么,人傻还是要多读书啊,多学学知识才能在广大程序员中占位脚跟!
10.组内成员分工和贡献评价
分工:
黄辉:
提出大体思路,设计主菜单,参与程序修改。
许云松:
编写密码修改程序,参与程序修改,写总结报告。
肖峰:
编写加密解密程,参与程序修改。
平措朗杰:
编写次菜单程序。
贡献评价(百分比):
许云松:
32%
黄辉:
30%
肖峰:
30%
平措朗杰:
8%