高级软件开发课程设计
1. 哪个学校的软件开发课程设置好
选择一所好的IT学校,应该看学校的师资力量,
IT培训毕竟是知识含量要专求很高的培训,属
培训讲师水平的高低会给培训带来直接的影响,因此,在参加IT培训班时,
对培训机构的老师应重点考察老师是否具有丰富的实践操作技能,
还要看他是否有丰富的讲课经验和水平,有的老师满腹经纶,
但讲课水平不高,这种培训会浪费大家的时间和金钱。
2. 软件工程课程设计
去网上搜软件工程的毕业设计,一应俱全
3. 求软件工程课程设计一份
图书馆管理系统 软件工程课程设计说明书一份
《图书管理系统》系统设计报告
一、 引言
1. 摘要:中学图书馆管理系统
目的:方便图书馆对书籍借阅的管理
主要功能: —学生基本信息查询
—书籍借阅管理
—书籍管理
2. 背景:第十小组承担开发任务
3. 工作条件与限制:windows操作平台,Visual Basic6.0和SQL Sserver2000等软件为开发工具,利用上课时间和课外时间做成。由于现在图书管理系统已经比叫完善,所以我们暂时没有能做出比以前有先进技术的管理系统。
4. 参考和引用资料:《数据库系统概论》,VB应用
5. 专门术语定义:
二、系统总体技术方案
1. 计算机系统配置:windows平台,VB/SqlServer2000,WINNT SERVER操作系统, SQL server2000关系数据库管理系统 ,VB操作软件,局域网。
2. 模块设计:主要分为三个模块:即学生基本信息模块,书籍借阅模块,书籍管理模块
代码设计:读者信息查询
Public connStr As ADODB.Connection
Private Sub Command1_Click()
End Sub
Private Sub cmdAdd_Click()
If Trim(List1.Text) <> "" Then
List2.AddItem (List1.Text)
End If
End Sub
Private Sub cmdMove_Click()
If Trim(List2.Text) <> "" Then
List2.RemoveItem (List2.ListIndex)
End If
End Sub
Private Sub cmdSearch_Click()
Dim cmdstr As String
If List2.ListCount = 0 Then
MsgBox "请选择输出列!", vbOKOnly, "提示"
Exit Sub
End If
cmdstr = "select "
For i = 0 To List2.ListCount - 1
If Trim(List2.List(i)) = "图书证号" Then
cmdstr = cmdstr + "READER_DATA." + Trim(List2.List(i)) + ","
Else
If Trim(List2.List(i)) = "书号" Then
cmdstr = cmdstr + "MARC_DATA." + Trim(List2.List(i)) + ","
Else
cmdstr = cmdstr + Trim(List2.List(i)) + ","
End If
End If
Next
cmdstr = Left(cmdstr, Len(cmdstr) - 1)
If Opbook.Value = True Then
cmdstr = cmdstr + " from MARC_DATA where "
End If
If Opreader.Value = True Then
cmdstr = cmdstr + " from READER_DATA where "
End If
If Oplend.Value = True Then
cmdstr = cmdstr + " from MARC_DATA,READER_DATA,LEND_DATA " & " where MARC_DATA.书号=LEND_DATA. 书号 and " & " READER_DATA.图书证号=LEND_DATA.图书证号 and "
End If
If Trim(comKey.Text) = "" Then
MsgBox "请选择查询关键字!", vbOKOnly, "提示"
Exit Sub
End If
If Trim(txtKey.Text) = "" Then
MsgBox "请设置查询关键字的值!", vbOKOnly, "提示"
Exit Sub
End If
If ComType.Text = "精确匹配" Then
cmdstr = cmdstr + Trim(comKey.Text) + "='" + Trim(txtKey.Text) + "'"
Else
cmdstr = cmdstr + Trim(comKey.Text) + " like '" + Trim(txtKey.Text) + "%'"
End If
Adodc1.RecordSource = cmdstr
Adodc1.Refresh
DataGrid1.Refresh
End Sub
Private Sub Form_Load()
Set connStr = New ADODB.Connection
connStr.Open "driver={SQL Server}; Server=SYSLAB000;UID=jj138;PWD=;database=计教(1)班38号"
Adodc1.ConnectionString = connStr
ComType.AddItem ("精确匹配")
ComType.AddItem ("前方一致匹配")
End Sub
Private Sub Label3_Click()
End Sub
Private Sub List2_Click()
End Sub
Private Sub Opbook_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "MARC_DATA", connStr, adOpenKeyset, adLockReadOnly, adCmdTable
comKey.Clear
List1.Clear
For i = 0 To rs.Fields.Count - 1
comKey.AddItem (rs.Fields(i).Name)
List1.AddItem (rs.Fields(i).Name)
Next
rs.Close
List2.Clear
txtKey.Text = ""
End Sub
Private Sub Oplend_Click()
comKey.Clear
List1.Clear
comKey.AddItem ("图书证号")
comKey.AddItem ("姓名")
comKey.AddItem ("书号")
comKey.AddItem ("书名")
comKey.AddItem ("出版社")
comKey.AddItem ("借出日期")
comKey.AddItem ("还书日期")
List1.AddItem ("图书证号")
List1.AddItem ("姓名")
List1.AddItem ("书号")
List1.AddItem ("书名")
List1.AddItem ("出版社")
List1.AddItem ("借出日期")
List1.AddItem ("还书日期")
List2.Clear
txtKey.Text = ""
End Sub
Private Sub Opreader_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "READER_DATA", connStr, adOpenKeyset, adLockReadOnly, adCmdTable
comKey.Clear
List1.Clear
For i = 0 To rs.Fields.Count - 1
comKey.AddItem (rs.Fields(i).Name)
List1.AddItem (rs.Fields(i).Name)
Next
rs.Close
List2.Clear
txtKey.Text = ""
End Sub
借还书处理
Private Sub cmdLend_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
If Trim(txtBid.Text) = "" Or Trim(txtRid_1.Text) = "" Then
MsgBox "请输入图书证号和书号!", vbOKOnly, "提示信息"
Else
rs.Open "LEND_DATA", connStr, adOpenKeyset, adLockOptimistic, adCmdTable
rs.AddNew
rs("书号") = txtBid.Text
rs("借出日期") = Date
rs("图书证号") = txtRid.Text
rs.Update
Adodc1.Refresh
End If
End Sub
Private Sub cmdReturn_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
If Trim(txtBid.Text) = "" Or Trim(txtRid_1.Text) = "" Then
MsgBox "请输入图书证号和书号!", vbOKOnly, "提示信息"
Else
cmdstr = "update LEND_DATA set 还书日期='" _
& Date & "' where 书号='" & Trim(txtBid.Text) & "'"
rs.Open cmdstr, connStr, adOpenKeyset, adLockOptimistic, adCmdText
Adodc1.Refresh
End If
End Sub
Private Sub cmds_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
cmdstr = "select * from READER_DATA WHERE 图书证号 ='" & Trim(txtRid_1.Text) & "'"
rs.Open cmdstr, connStr, adOpenForwardOnly, adLockReadOnly, adCmdText
If Not rs.EOF Then
txtRid.Text = rs("图书证号")
txtName.Text = rs("姓名")
If Not IsNull(rs("性别")) Then
txtXb.Text = rs("性别")
End If
If Not IsNull(rs("系名")) Then
txtXm.Text = rs("系名")
End If
Else
MsgBox "未找到该读者信息!", vbOKOnly, "提示信息"
End If
cmdstr = "select 借出日期,还书日期,LEND_DATA.书号,书名,作者,出版社" & " from LEND_DATA,MARC_DATA " & "where LEND_DATA.书号=MARC_DATA.书号 and " & " 还书日期 is null and 图书证号='" & Trim(txtRid_1.Text) & "'"
Adodc1.RecordSource = cmdstr
Adodc1.Refresh
End Sub
Private Sub cmdSearch_Click()
cmdstr = "select 借出日期,还书日期,LEND_DATA.书号,书名,作者,出版社" & "from LEND_DATA,MARC_DATA " & "where LEND_DATA.书号=MARC_DATA.书号 and 图书证号='" & Trim(txtRid_1.Text) & "'"
Adodc1.RecordSource = cmdstr
Adodc1.Refresh
End Sub
Private Sub DataGrid1_Click()
If Not Adodc1.Recordset.BOF And Not Adodc1.Recordset.BOF Then
txtBid.Text = Adodc1.Recordset("书号")
End If
End Sub
Private Sub Form_Load()
Set connStr = New ADODB.Connection
connStr.Open "driver={SQL Server}; Server=SYSLAB000;UID=jj138;PWD=;database=计教(1)班38号"
Adodc1.ConnectionString = connStr
End Sub
图书馆详细信息
Private Sub txt_refresh()
If Not Adodc1.Recordset.EOF And Not Adodc1.Recordset.BOF Then
txtBid.Text = Adodc1.Recordset("书号")
txtBname.Text = Adodc1.Recordset("书名")
txtWrite.Text = Adodc1.Recordset("作者")
txtPublisher.Text = Adodc1.Recordset("出版社")
txtYear.Text = Adodc1.Recordset("出版时间")
txtGb.Text = Adodc1.Recordset("国别代码")
txtDate.Text = Adodc1.Recordset("进馆时间")
txtCallno.Text = Adodc1.Recordset("分类号")
End If
End Sub
Private Sub cmdDele_Click()
Dim deletxt As String
deletxt = "是否删除图书《" & Adodc1.Recordset("书名") & "》的记录?"
If Not Adodc1.Recordset.EOF And Not Adodc1.Recordset.BOF Then
If MsgBox(deletxt, vbOKCancel, "提示信息") = vbOK Then
Adodc1.Recordset.Delete
Adodc1.Refresh
End If
End If
End Sub
Private Sub cmdNew_Click()
If cmdNew.Caption = "新增" Then
txt_enable (2)
cmdNew.Caption = "保存"
txtBid.Text = ""
txtBname.Text = ""
txtWrite.Text = ""
txtPublisher.Text = ""
txtYear.Text = ""
txtGb.Text = ""
txtDate.Text = ""
txtCallno.Text = ""
Else
Adodc1.Recordset.AddNew
Adodc1.Recordset("书号") = Trim(txtBid.Text)
Adodc1.Recordset("书名") = Trim(txtBname.Text)
Adodc1.Recordset("作者") = Trim(txtWrite.Text)
Adodc1.Recordset("出版社") = Trim(txtPublisher.Text)
Adodc1.Recordset("出版时间") = Trim(txtYear.Text)
Adodc1.Recordset("国别代码") = Trim(txtGb.Text)
4
Adodc1.Recordset("进馆时间") = Trim(txtDate.Text)
Adodc1.Recordset("分类号") = Trim(txtCallno.Text)
Adodc1.Recordset.UpdateBatch
Adodc1.Refresh
txt_enable (1)
cmdNew.Caption = "新增"
Adodc1.Recordset.MoveFirst
txt_refresh
End If
Private Sub cmdNext_Click()
If Not Adodc1.Recordset.EOF Then
Adodc1.Recordset.MoveNext
txt_refresh
End If
End Sub
Private Sub cmdPre_Click()
If Not Adodc1.Recordset.BOF Then
Adodc1.Recordset.MovePrevious
txt_refresh 2
End If
End Sub
Private Sub cmdUpdate_Click()
If cmdUpdate.Caption = "修改" Then
txt_enable (2)
cmdUpdate.Caption = "保存"
Else
Adodc1.Recordset("书号") = Trim(txtBid.Text)
Adodc1.Recordset("书名") = Trim(txtBname.Text)
Adodc1.Recordset("作者") = Trim(txtWrite.Text)
Adodc1.Recordset("出版社") = Trim(txtPublisher.Text)
Adodc1.Recordset("出版时间") = Trim(txtYear.Text)
Adodc1.Recordset("国别代码") = Trim(txtGb.Text)
Adodc1.Recordset("进馆时间") = Trim(txtDate.Text)
Adodc1.Recordset("分类号") = Trim(txtCallno.Text)
Adodc1.Recordset.UpdateBatch
Adodc1.Refresh
txt_enable (1)
cmdUpdate.Caption = "修改"
End If
End Sub
Private Sub Form_Load()
txt_refresh
End Sub
Private Sub Text1_Change()
End Sub
Private Sub Text8_Change()
End Sub
Private Sub txtBname_Change()
End Sub
4. 课程设计操作系统模拟软件的设计与开发 设备驱动程序设计, 要求如下: (1) 设计Windows XP或者Linux操作系
学校教的C语言基础,一般都是在Windows系统下的命令行界面下运行的,可以输出一些字符,也可以输入一些字符。因为Windows下的操作都可以通过鼠标点击来实现,所以就很少回去用到命令行的程序,因此Windows系统提供的命令行程序就会很少。
其实命令行程序的功能是非常强大的,LZ可以去学习使用一下Ubuntu这个操作系统,就会体会到命令行程序的强大,像VIM命令行编辑器,这个类似于记事本,当然功能超级强大,还有很多很多。
LZ说的图形化的小程序,说的应该是Windows的窗口界面的程序,可以缩小、也可以放大,还可以拖来拖去。这个你用VB或C#来做最简单了,直接拖放控件,然后写几个事件响应函数,比如鼠标单击一个按钮回去执行你自己定义的函数,这就是所谓的事件驱动机制。
如果LZ想使用C语言来编写Windows图形界面程序的话,就需要去学习一下WIN32 API的使用,介绍这方面内容的书已经很少了。LZ也可以去学习一下MFC,经典书籍是《MFC深入浅出》,这个需要LZ具有C++面向对象语言的基础,也是直接拖放控件,然后注册事件处理函数。
另外,团IDC网上有许多产品团购,便宜有口碑
5. 高级语言程序设计课程设计——学生成绩统计
这个问题我回答过,程序论文我可发给你,流程图显示不太清楚#include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" #include "mem.h" #include "ctype.h" /#include "alloc.h" #define N 3 typedef struct z1
{
char no[11];
char name[15];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
STUDENT *init();
STUDENT *create();
STUDENT *delete(STUDENT *h);
void print(STUDENT *h); /* 显示所有记录*/
void search(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*读入记录*/
void computer(STUDENT *h); /*计算总分和均分*/
STUDENT *insert(STUDENT *h); /*插入记录*/
void append(); /*追加记录*/
void (); /*复制文件*/
STUDENT *sort(STUDENT *h); /*排序*/
STUDENT *index(STUDENT *h); /*索引*/
void total(STUDENT *h); /*分类合计*/
int menu_select(); /*菜单函数*/
/******主函数开始*******/
main()
{
int i;
STUDENT *head; /*链表定义头指针*/
head=init(); /*初始化链表*/
clrscr(); /*清屏*/
for(;;) /*无限循环*/
{
switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{ /*值不同,执行的函数不同,break 不能省略*/
case 0:head=init();break;
case 1:head=create();break;
case 2:head=delete(head);break;
case 3:print(head);break; /*显示全部记录*/
case 4:search(head);break; /*查找记录*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*读文件*/
case 7:computer(head);break; /*计算总分和均分*/
case 8:head=insert(head); break; /*插入记录*/
case 9:();break; /*复制文件*/
case 10:head=sort(head);break; /*排序*/
case 11:append();break; /*追加记录*/
case 12:head=index(head);break; /*索引*/
case 13:total(head);break; /*分类合计*/
case 14:exit(0); /*如菜单返回值为14程序结束*/
}
}
}
/*菜单函数,返回值为整数*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定义菜单字符串数组*/
" 0. init list", /*初始化*/
" 1. Enter list", /*输入记录*/
" 2. Delete a record from list", /*从表中删除记录*/
" 3. print list ", /*显示单链表中所有记录*/
" 4. Search record on name", /*按照姓名查找记录*/
" 5. Save the file", /*将单链表中记录保存到文件中*/
" 6. Load the file", /*从文件中读入记录*/
" 7. compute the score", /*计算所有学生的总分和均分*/
" 8. insert record to list ", /*插入记录到表中*/
" 9. the file to new file", /*复制文件*/
" 10. sort to make new file", /*排序*/
" 11. append record to file", /*追加记录到文件中*/
" 12. index on nomber", /*索引*/
" 13. total on nomber", /*分类合计*/
" 14. Quit"}; /*退出*/
char s[3]; /*以字符形式保存选择号*/
int c,i; /*定义整形变量*/
gotoxy(1,25); /*移动光标*/
printf("press any key enter menu......\n"); /*压任一键进入主菜单*/
getch(); /*输入任一键*/
clrscr(); /*清屏幕*/
gotoxy(1,1); /*移动光标*/
textcolor(YELLOW); /*设置文本显示颜色为黄色*/
textbackground(BLUE); /*设置背景颜色为蓝色*/
gotoxy(10,2); /*移动光标*/
putch(0xc9); /*输出左上角边框┏*/
for(i=1;i<44;i++)
putch(0xcd); /*输出上边框水平线*/
putch(0xbb); /*输出右上角边框 ┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /*输出左垂直线*/
gotoxy(54,i);putch(0xba);
} /*输出右垂直线*/
gotoxy(10,20);putch(0xc8); /*输出左上角边框┗*/
for(i=1;i<44;i++)
putch(0xcd); /*输出下边框水平线*/
putch(0xbc); /*输出右下角边框┛*/
window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/
clrscr(); /*清屏*/
for(i=0;i<16;i++) /*输出主菜单数组*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*设置背景颜色为黑色*/
window(1,1,80,25); /*恢复原窗口大小*/
gotoxy(10,21); /*移动光标*/
do{
printf("\n Enter you choice(0~14):"); /*在菜单窗口外显示提示信息*/
scanf("%s",s); /*输入选择项*/
c=atoi(s); /*将输入的字符串转化为整形数*/
}while(c<0||c>14); /*选择项不在0~14之间重输*/
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}
STUDENT *init()
{
return NULL;
}
/*创建链表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!info) /*如果指针info为空*/
{
printf("\nout of memory"); /*输出内存溢出*/
return NULL; /*返回空指针*/
}
inputs("enter no:",info->no,11); /*输入学号并校验*/
if(info->no[0]=='@') break; /*如果学号首字符为@则结束输入*/
inputs("enter name:",info->name,15); /*输入姓名,并进行校验*/
printf("please input %d score \n",N); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;i<N;i++) /*N门课程循环N次*/
{
do{
printf("score%d:",i+1); /*提示输入第几门课程*/
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i];
}
info->sum=s;
info->average=(float)s/N;
info->order=0;
info->next=h;
h=info; }
return(h); /*返回头指针*/
}
/*输入字符串,并进行长度验证*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt); /*显示提示信息*/
scanf("%s",p); if(strlen(p)>count)printf("\n too long! \n"); }while(strlen(p)>count);
strcpy(s,p); }
void print(STUDENT *h)
{
int i=0; /* 统计记录条数*/
STUDENT *p; /*移动指针*/
clrscr(); /*清屏*/
p=h; /*初值为头指针*/
printf("\n\n\n****************************STUDENT********************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");
while(p!=NULL)
{
i++;
printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],
p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("**********************************end*********************************\n");
}
/*删除记录*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/
char s[11]; /*存放学号*/
clrscr(); /*清屏*/
printf("please deleted no\n"); /*显示提示信息*/
scanf("%s",s); /*输入要删除记录的学号*/
q=p=h; /*给q和p赋初值头指针*/
while(strcmp(p->no,s)&&p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/
{
q=p; /*将p指针值赋给q作为p的前驱指针*/
p=p->next; /*将p指针指向下一条记录*/
}
if(p==NULL) /*如果p为空,说明链表中没有该结点*/
printf("\nlist no %s student\n",s);
else /*p不为空,显示找到的记录信息*/
{
printf("*****************************have found***************************\n");
printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,
p->average,p->order);
printf("********************************end*******************************\n");
getch(); /*压任一键后,开始删除*/
if(p==h) /*如果p==h,说明被删结点是头结点*/
h=p->next; /*修改头指针指向下一条记录*/
else
q->next=p->next; /*不是头指针,将p的后继结点作为q的后继结点*/
free(p); /*释放p所指结点空间*/
printf("\n have deleted No %s student\n",s);
printf("Don't forget save\n");/*提示删除后不要忘记保存文件*/
}
return(h); /*返回头指针*/
}
/*查找记录*/
void search(STUDENT *h)
{
STUDENT *p; char s[15]; clrscr();
printf("please enter name for search\n");
scanf("%s",s); /*输入姓名*/
p=h; /*将头指针赋给p*/
while(strcmp(p->name,s)&&p!=NULL) /*当记录的姓名不是要找的,或指针不为空时*/
p=p->next; /*移动指针,指向下一结点*/
if(p==NULL) /*如果指针为空*/
printf("\nlist no %s student\n",s); /*显示没有该学生*/
else /*显示找到的记录信息*/
{
printf("\n\n*****************************havefound***************************\n");
printf("|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("********************************end*******************************\n");
}
}
/*插入记录*/
STUDENT *insert(STUDENT *h)
{
STUDENT *p,*q,*info; /*p指向插入位置,q是其前驱,info指新插入记录*/
char s[11]; /*保存插入点位置的学号*/
int s1,i;
printf("please enter location before the no\n");
scanf("%s",s); /*输入插入点学号*/
printf("\nplease new record\n"); /*提示输入记录信息*/
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!info)
{
printf("\nout of memory"); /*如没有申请到,内存溢出*/
return NULL; /*返回空指针*/
}
inputs("enter no:",info->no,11); /*输入学号*/
inputs("enter name:",info->name,15); /*输入姓名*/
printf("please input %d score \n",N); /*提示输入分数*/
s1=0; /*保存新记录的总分,初值为0*/
for(i=0;i<N;i++) /*N门课程循环N次输入成绩*/
{
do{ /*对数据进行验证,保证在0~100之间*/
printf("score%d:",i+1);
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s1=s1+info->score[i]; /*计算总分*/
}
info->sum=s1; /*将总分存入新记录中*/
info->average=(float)s1/N; /*计算均分*/
info->order=0; /*名次赋值0*/
info->next=NULL; /*设后继指针为空*/
p=h; /*将指针赋值给p*/
q=h; /*将指针赋值给q*/
while(strcmp(p->no,s)&&p!=NULL) /*查找插入位置*/
{
q=p; /*保存指针p,作为下一个p的前驱*/
p=p->next; /*将指针p后移*/
}
if(p==NULL) /*如果p指针为空,说明没有指定结点*/
if(p==h) /*同时p等于h,说明链表为空*/
h=info; /*新记录则为头结点*/
else
q->next=info; else
if(p==h) {
info->next=p; h=info; }
else
{
info->next=p; q->next=info;
}
printf("\n ----have inserted %s student----\n",info->name); printf("---Don't forget save---\n"); /*提示存盘*/
return(h); /*返回头指针*/
}
/*保存数据到文件*/
void save(STUDENT *h)
{
FILE *fp; /*定义指向文件的指针*/
STUDENT *p; /* 定义移动指针*/
char outfile[10]; /*保存输出文件名*/
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示文件名格式信息*/
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件,如没有则建立*/
{
printf("can not open file\n");
exit(1);
}
printf("\nSaving file......\n"); /*打开文件,提示正在保存*/
p=h; /*移动指针从头指针开始*/
while(p!=NULL) /*如p不为空*/
{
fwrite(p,sizeof(STUDENT),1,fp);/*写入一条记录*/
p=p->next; /*指针后移*/
}
fclose(fp); /*关闭文件*/
printf("-----save success!!-----\n"); /*显示保存成功*/
}
/* 从文件读数据*/
STUDENT *load()
{
STUDENT *p,*q,*h=NULL; /*定义记录指针变量*/
FILE *fp; /* 定义指向文件的指针*/
char infile[10]; /*保存文件名*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*输入文件名*/
if((fp=fopen(infile,"rb"))==NULL) /*打开一个二进制文件,为读方式*/
{
printf("can not open file\n"); /*如不能打开,则结束程序*/
exit(1);
}
printf("\n -----Loading file!-----\n");
p=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!p)
{
printf("out of memory!\n"); /*如没有申请到,则内存溢出*/
return h; /*返回空头指针*/
}
h=p; /*申请到空间,将其作为头指针*/
while(!feof(fp)) /*循环读数据直到文件尾结束*/
{
if(1!=fread(p,sizeof(STUDENT),1,fp))
break; /*如果没读到数据,跳出循环*/
p->next=(STUDENT *)malloc(sizeof(STUDENT)); /*为下一个结点申请空间*/
if(!p->next)
{
printf("out of memory!\n"); return h;
}
q=p; p=p->next; }
q->next=NULL; /*最后一个结点的后继指针为空*/
fclose(fp); /*关闭文件*/
printf("---You have success read data from file!!!---\n");
return h; /*返回头指针*/
}
/*追加记录到文件*/
void append()
{
FILE *fp; /*定义指向文件的指针*/
STUDENT *info; /*新记录指针*/
int s1,i;
char infile[10]; /*保存文件名*/
printf("\nplease new record\n");
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!info)
{
printf("\nout of memory"); /*没有申请到,内存溢出本函数结束*/
return ;
}
inputs("enter no:",info->no,11); /*调用inputs输入学号*/
inputs("enter name:",info->name,15); /*调用inputs输入姓名*/
printf("please input %d score \n",N); /*提示输入成绩*/
s1=0;
for(i=0;i<N;i++)
{
do{
printf("score%d:",i+1);
scanf("%d",&info->score[i]); /*输入成绩*/
if(info->score[i]>100||info->score[i]<0)printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0); /*成绩数据验证*/
s1=s1+info->score[i]; /*求总分*/
}
info->sum=s1; /*保存总分*/
info->average=(float)s1/N; /*求均分*/
info->order=0; /*名次初始值为0*/
info->next=NULL; /*将新记录后继指针赋值为空*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*输入文件名*/
if((fp=fopen(infile,"ab"))==NULL) /*向二进制文件尾增加数据方式打开文件*/
{
printf("can not open file\n"); /*显示不能打开*/
exit(1); /*退出程序*/
}
printf("\n -----Appending record!-----\n");
if(1!=fwrite(info,sizeof(STUDENT),1,fp)) /*写文件操作*/
{
printf("-----file write error!-----\n");
return; /*返回*/
}
printf("-----append sucess!!----\n");
fclose(fp); /*关闭文件*/
}
/*文件拷贝*/
void ()
{
char outfile[10],infile[10];
FILE *sfp,*tfp; /*源和目标文件指针*/
STUDENT *p=NULL; /*移动指针*/
clrscr(); /*清屏*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n");
scanf("%s",infile); /*输入源文件名*/
if((sfp=fopen(infile,"rb"))==NULL) /*二进制读方式打开源文件*/
{
printf("can not open input file\n");
exit(0);
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示输入目标文件名*/
scanf("%s",outfile); /*输入目标文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*二进制写方式打开目标文件*/
{
printf("can not open output file \n");
exit(0);
}
while(!feof(sfp)) /*读文件直到文件尾*/
{
if(1!=fread(p,sizeof(STUDENT),1,sfp))
break; /*块读*/
fwrite(p,sizeof(STUDENT),1,tfp); /*块写*/
}
fclose(sfp); /*关闭源文件*/
fclose(tfp); /*关闭目标文件*/
printf("you have success file!!!\n"); /*显示成功拷贝*/
}
/*排序*/
STUDENT *sort(STUDENT *h)
{
int i=0; /*保存名次*/
STUDENT *p,*q,*t,*h1; /*定义临时指针*/
h1=h->next; /*将原表的头指针所指的下一个结点作头指针*/
h->next=NULL; /*第一个结点为新表的头结点*/
while(h1!=NULL) /*当原表不为空时,进行排序*/
{
t=h1; /*取原表的头结点*/
h1=h1->next; /*原表头结点指针后移*/
p=h; /*设定移动指针p,从头指针开始*/
q=h; /*设定移动指针q做为p的前驱,初值为头指针*/
while(t->sum<p->sum&&p!=NULL) /*作总分比较*/
{
q=p; /*待排序点值小,则新表指针后移*/
p=p->next;
}
if(p==q) /*p==q,说明待排序点值大,应排在首位*/
{
t->next=p; /*待排序点的后继为p*/
h=t; /*新头结点为待排序点*/
}
else /*待排序点应插入在中间某个位置q和p之间,如p为空则是尾部*/
{
t->next=p; /*t的后继是p*/
q->next=t; /*q的后继是t*/
}
}
p=h; /*已排好序的头指针赋给p,准备填写名次*/
while(p!=NULL) /*当p不为空时,进行下列操作*/
{
i++; /*结点序号*/
p->order=i; /*将名次赋值*/
p=p->next; /*指针后移*/
}
printf("sort sucess!!!\n"); /*排序成功*/
return h; /*返回头指针*/
}
/*计算总分和均值*/
void computer(STUDENT *h)
{
STUDENT *p; /*定义移动指针*/
int i=0; /*保存记录条数初值为0*/
long s=0; /*总分初值为0*/
float average=0; /*均分初值为0*/
p=h; /*从头指针开始*/
while(p!=NULL) /*当p不为空时处理*/
{
s+=p->sum; /*累加总分*/
i++; /*统计记录条数*/
p=p->next; /*指针后移*/
}
average=(float)s/i;/* 求均分,均分为浮点数,总分为整数,所以做类型转换*/
printf("\n--All students sum score is:%ld average is %5.2f\n",s,average);
}
/*索引*/
STUDENT *index(STUDENT *h)
{
STUDENT *p,*q,*t,*h1; /*定义临时指针*/
h1=h->next; /*将原表的头指针所指的下一个结点作头指针*/
h->next=NULL; /*第一个结点为新表的头结点*/
while(h1!=NULL) /*当原表不为空时,进行排序*/
{
t=h1; /*取原表的头结点*/
h1=h1->next; /*原表头结点指针后移*/
p=h; /*设定移动指针p,从头指针开始*/
q=h; /*设定移动指针q做为p的前驱,初值为头指针*/
while(strcmp(t->no,p->no)>0&&p!=NULL) /*作学号比较*/
{
q=p; p=p->next;
}
if(p==q) /*p==q, {
t->next=p; h=t; }
else {
t->next=p; /*t的后继是p*/
q->next=t; /*q的后继是t*/
}
}
printf("index sucess!!!\n"); /*索引排序成功*/
return h; /*返回头指针*/
}
/*分类合计*/
void total(STUDENT *h)
{
STUDENT *p,*q; /*定义临时指针变量*/
char sno[9],qno[9],*ptr; /*保存班级号的*/
float s1,ave; /*保存总分和均分*/
int i; clrscr(); /*清屏*/
printf("\n\n *******************Total*****************\n");
printf("---class---------sum--------------average----\n");
p=h; while(p!=NULL)
{
memcpy(sno,p->no,8); /*从学号中取出班级号*/
sno[8]='\0'; /*做字符串结束标记*/
q=p->next; /*将指针指向待比较的记录*/
s1=p->sum; /*当前班级的总分初值为该班级的第一条记录总分*/
ave=p->average; /*当前班级的均分初值为该班级的第一条记录均分*/
i=1; /*统计当前班级人数*/
while(q!=NULL) /*内循环开始*/
{
memcpy(qno,q->no,8); /*读取班级号*/
qno[8]='\0'; /*做字符串结束标记*/
if(strcmp(qno,sno)==0) /*比较班级号*/
{
s1+=q->sum; /*累加总分*/
ave+=q->average; /*累加均分*/
i++; /*累加班级人数*/
q=q->next; /*指针指向下一条记录*/
}
else
break; }
printf("%s %10.2f %5.2f\n",sno,s1,ave/i);
if(q==NULL)
break; else
p=q; }
printf("---------------------------------------------\n");
}
6. 《软件工程》课程设计作业
没猜错的化你是想找一份完整的《软件设计开发文档》,最主要的是得做过项目,有实践经验的才能写出合格的文档,如果有难题可以私我